Computer >> 컴퓨터 >  >> 프로그램 작성 >> Python

Python 삽입 정렬을 작성하는 방법

Python 삽입 정렬은 게임 카드 정렬과 유사합니다. 삽입 정렬을 사용하려면 정렬된 목록과 정렬되지 않은 목록의 두 가지 목록을 만듭니다. 해당 항목을 정렬할 때까지 정렬되지 않은 목록의 각 항목을 비교합니다. 삽입 정렬은 Python 언어의 일반적인 표준 알고리즘입니다.

손에 있는 카드 놀이를 분류해 본 적이 있습니까? 이것이 파이썬 삽입 정렬의 개념에 대해 생각하는 한 가지 방법입니다. 몇 가지 요소만으로 목록을 정렬해야 할 때 삽입 정렬이 도움이 됩니다.

삽입 정렬은 배열의 각 반복 후에 정렬되지 않은 요소를 올바른 위치에 배치합니다.

이 가이드에서는 삽입 정렬이 무엇이며 어떻게 작동하는지 설명합니다. 이 정렬 알고리즘을 시작할 수 있도록 예제를 참조하여 Python에서 삽입 정렬을 구현하는 방법을 논의할 것입니다.

Python 삽입 정렬이란 무엇입니까?

삽입 정렬은 목록을 정렬된 것과 정렬되지 않은 두 개의 하위 목록으로 나눕니다. 그런 다음 정렬되지 않은 목록의 각 요소를 비교하고 목록의 각 항목이 정렬될 때까지 계속 비교합니다.

삽입 정렬 알고리즘은 정렬된 항목을 정렬된 하위 목록으로 이동하고 정렬되지 않은 하위 목록에서 제거합니다. 두 하위 목록은 동일한 배열의 일부이지만 항목이 정렬되었는지 여부를 구별합니다.

삽입 정렬은 카드 게임에서 손에 있는 카드 세트를 정렬하는 것과 같은 방식으로 생각할 수 있습니다.

카드 목록을 하나씩 이동하고 서로 비교합니다. 정렬된 카드는 손의 왼쪽에 나타납니다. 정렬되지 않은 카드는 모두 정렬할 때까지 오른쪽에 표시됩니다.

참가자의 81%는 부트캠프에 참석한 후 기술 직업 전망에 대해 더 자신감을 느꼈다고 말했습니다. 지금 부트캠프에 참여하십시오.

부트캠프 졸업생은 부트캠프 시작부터 첫 직장을 찾는 데까지 6개월도 채 걸리지 않았습니다.

Python 삽입 정렬은 어떻게 작동합니까?

삽입 정렬 알고리즘을 사용하여 비즈니스를 시작하고 배열을 정렬해 보겠습니다. 다음 정렬되지 않은 배열을 고려하십시오.

9 4 3 5

삽입 정렬에서는 첫 번째 요소가 정렬된 것으로 간주됩니다. 두 번째 요소는 자체 변수에 저장됩니다. 이 변수를 current_number라고 합니다. .

정렬됨 현재_번호

9 4 3 5

current_number를 비교해야 합니다. 배열의 첫 번째 위치에 항목이 있습니다. 현재_번호인 경우 첫 번째 요소보다 크면 같은 위치에 유지됩니다. 그렇지 않으면 current_number가 첫 번째 요소의 맨 앞으로 이동합니다.

4는 9보다 크지 않으므로 이 두 요소는 자리를 바꿉니다.

4 9 3 5

목록의 처음 두 요소가 정렬됩니다. 다음으로 current_number 값을 목록의 세 번째 항목으로 변경하고 왼쪽에 있는 모든 항목과 비교합니다.

current_number는 3이 됩니다. 비교해야 합니다.

  • 3이 9보다 큽니까? 아니요, 따라서 9 앞에 3이 삽입됩니다.
  • 3이 4보다 큽니까? 아니요, 따라서 3은 4보다 먼저 이동됩니다.

이제 목록은 다음과 같습니다.

3 4 9 5

이 프로세스는 목록이 정렬될 때까지 반복됩니다. 목록에는 4개의 값만 포함되어 있기 때문에 수행할 비교 세트가 하나만 더 있습니다. 다음 반복에서 5는 current_number가 됩니다.

  • 5가 9보다 큽니까? 아니요, 9시 전에 5번 이동합니다.

5가 정렬된 목록의 마지막 숫자이기 때문에 더 이상 비교하지 않습니다. 이 반복 후에 배열이 정렬되었습니다.

3 4 5 9

간단합니다! 삽입 정렬에서 우리는 항상 목록의 왼쪽에 정렬된 값을 유지했습니다. 정렬되지 않은 값이 오른쪽에 나타납니다.

목록의 각 반복에 대해 current_number를 정렬되지 않은 모든 항목과 비교했습니다. 이 프로세스는 목록이 정렬될 때까지 반복되었습니다.

Python에서 삽입 정렬을 작성하는 방법

종이에 삽입 정렬을 통해 모든 것이 훌륭하고 잘 진행됩니다. 이제 핵심을 살펴보고 Python에서 삽입 정렬을 구현할 때입니다.

정렬 함수 작성

정렬을 수행하는 Python 함수를 작성하여 시작하겠습니다.

def sortNumbers(toSort):
	for number in range(1, len(toSort)):
		current_number = toSort[number]
		i = number - 1

		while i >= 0 and current_number < toSort[i]:
			toSort[i + 1] = toSort[i]
			i -= 1

		toSort[i + 1] = current_number

이것이 어떻게 작동하는지 살펴보겠습니다. sortNumbers에서 함수를 사용하여 목록의 모든 숫자를 반복하는 Python for 루프를 만듭니다. 그런 다음 목록의 첫 번째 요소를 Python 변수 current_number에 할당하여 정렬된 값으로 설정합니다. .

정렬되지 않은 Python 목록의 모든 항목(current_number 이후의 모든 항목)을 반복합니다. 그런 다음 current_number를 왼쪽에 있는 각 숫자와 비교합니다. 이러한 일이 발생하면 current_number 값을 설정합니다. 목록에서 그 뒤에 오는 요소와 동일해야 합니다.

메인 프로그램 작성

삽입 정렬을 실행하는 메인 프로그램을 작성해야 합니다.

numbers = [9, 4, 3, 5]
sortNumbers(numbers)

print(numbers)

코드 반환:

[3, 4, 5, 9]

우리 목록은 오름차순으로 정렬되었습니다! 여기까지 온 것을 축하합니다.

Python 삽입 정렬:내림차순

삽입 정렬은 숫자를 내림차순으로 정렬할 수 있습니다. 이를 수행하려면 while 루프에서 "보다 작음"(>) 기호를 반전하고 보다 큼 기호로 만들어야 합니다.

내가>=0이고 current_number인 동안> toSort[i]:

위의 예에서 대체된 이 코드 줄은 목록의 항목을 역순으로 정렬합니다.

언제 삽입 정렬을 사용해야 합니까?

삽입 정렬은 목록의 데이터가 거의 정렬되거나 작은 목록을 정렬할 때 가장 잘 사용됩니다. 큰 목록을 정렬하는 데 사용할 수 있는 보다 효율적인 알고리즘이 있습니다. 예를 들어 병합 정렬이나 빠른 정렬이 더 빠릅니다.

삽입 정렬은 버블 정렬보다 빠릅니다.

삽입 정렬은 어쨌든 알아두면 유용합니다. 삽입 정렬을 구현하는 방법을 알면 사용할 수 있는 다른 유형의 정렬을 얻을 수 있습니다.

삽입 정렬은 다른 정렬 알고리즘보다 덜 복잡합니다. 삽입 정렬을 작성하는 방법을 배운 후에는 병합 정렬과 같은 더 복잡한 정렬에 대해 더 많이 배우게 됩니다.

Python 삽입 정렬:복잡성 분석

모든 알고리즘과 마찬가지로 최고, 최악 및 평균 복잡성을 고려하는 것이 중요합니다. 이를 통해 알고리즘이 작업을 수행하는 데 얼마나 효과적인지(이 경우 목록 정렬)에 대한 통찰력을 얻을 수 있습니다.

최악의 경우와 평균 복잡도는 O(n2)입니다. 즉, 목록에서 정렬할 값을 더 추가하면 알고리즘이 기하급수적으로 느려집니다.

가장 좋은 시나리오는 O(n)입니다. 이것은 정렬된 목록에서 알고리즘을 실행할 때 발생합니다. 알고리즘은 항목이 정렬되었는지 확인한 다음 실행을 중지합니다.

Big O 표기법에 대한 2부작 시리즈에서 알고리즘 복잡성을 표현하는 방법에 대해 자세히 알아볼 수 있습니다.

결론

삽입 정렬은 카드 게임에서 손에 있는 카드 목록을 정렬하는 것과 같습니다. 정렬된 항목 목록과 정렬할 항목 목록의 두 가지 목록을 유지합니다. 그런 다음 정렬되지 않은 항목 목록을 살펴보고 모든 항목이 정렬될 때까지 위치를 섞습니다.

더 많은 Python 프로그래밍 언어 리소스를 찾고 있습니까? 전체 Python 학습 방법 가이드를 확인하세요. Python을 배우는 방법에 대한 최고의 팁과 온라인 과정, 책 및 기타 리소스 목록을 찾을 수 있습니다.