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

Python QuickSort를 코딩하는 방법

Python QuickSort는 피벗 요소를 선택하고 배열 두 개의 새로운 배열 . 피벗보다 높은 숫자는 하나로 배열 <엠>; 피벗보다 낮은 숫자는 다른 피벗으로 이동합니다. 각 배열 이 정렬된 다음 모든 배열 하나로 병합됩니다.

Python QuickSort 코딩 방법

프로그래밍에서 목록을 정렬하는 데 사용할 수 있는 정렬 알고리즘이 많이 있습니다. Python 삽입 정렬, 버블 정렬 등이 있습니다. QuickSort는 가장 일반적인 유형의 정렬 중 하나입니다.

이 가이드에서는 QuickSort가 무엇이고 어떻게 작동하는지에 대해 이야기할 것입니다. 구현 방법을 배울 수 있도록 Python QuickSort의 예를 살펴보겠습니다.

더 이상 고민하지 말고 시작하겠습니다!

Python QuickSort란 무엇입니까?

Python QuickSort 알고리즘은 배열을 하위 배열로 나눕니다. 이 알고리즘은 이러한 하위 배열을 재귀적으로 호출하여 목록의 각 요소를 정렬합니다. 하위 배열의 내용은 새 하위 배열로 이동하지 않는 피벗 요소에 의해 결정됩니다.

QuickSort 알고리즘은 분할 정복합니다. 이것은 목록을 정렬하는 작업이 여러 하위 작업으로 나누어져 있음을 의미합니다. 정렬이 끝나면 이러한 하위 작업의 결과가 합쳐져 ​​정렬된 목록이 반환됩니다.

QuickSort에서 하위 작업은 각 하위 목록에 대한 피벗을 설정하고 피벗에 상대적인 값을 기반으로 요소를 정렬합니다.

Python QuickSort는 언제 사용해야 하나요?

QuickSort는 시간 복잡도가 중요한 경우에 유용합니다. 이는 QuickSort가 다른 알고리즘보다 메모리 공간을 적게 사용하여 효율성을 향상시키기 때문입니다.

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

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

Python 재귀에 익숙한 경우에만 QuickSort를 사용해야 합니다. QuickSort 알고리즘이 재귀 함수에 의존하기 때문입니다.

QuickSort는 더 작은 배열에서 병합 정렬보다 더 효율적입니다. 그러나 더 큰 데이터 세트에서는 삽입 정렬 또는 병합 정렬이 더 빠를 수 있습니다.

QuickSort는 어떻게 작동합니까?

QuickSort는 피벗 역할을 할 요소를 선택합니다. 이것은 목록의 모든 요소가 될 수 있습니다. 이 자습서에서는 목록(3)의 마지막 항목을 선택합니다.

8 4 5 2 1 3

QuickSort는 목록의 항목을 반복할 때 피벗 값을 모든 숫자와 비교합니다. 항목이 피벗 번호보다 크면 피벗 다음으로 번호를 이동합니다. 그렇지 않으면 피벗 앞으로 숫자를 이동합니다.

2 1 3 8 5 4

값 3이 목록 아래로 이동했습니다. 3보다 작은 모든 항목은 왼쪽으로 이동했습니다. 3보다 큰 값은 모두 오른쪽으로 이동했습니다.

Python 배열은 피벗보다 큰 항목과 피벗보다 작은 항목의 두 부분으로 나뉩니다.

이 프로세스가 시작되면 두 반쪽 각각에서 새로운 피벗이 시작됩니다. 이 피벗은 별도로 시작되며 위와 동일한 알고리즘을 사용합니다. 먼저 각 목록의 마지막 값과 동일한 피벗 값을 설정합니다.

피봇 1

피봇 2

2 1
8 5 4

다음으로, 피벗보다 큰 모든 값을 피벗 오른쪽으로 이동합니다. 피벗보다 작은 모든 값을 왼쪽으로 이동합니다.

피봇 1

피봇 2

1 2
4 8 5

이 프로세스는 목록을 정렬할 때까지 계속됩니다.

처음 1 2
4 8 5
두 번째
1

8 5





5 87t?/
세 번째




8

최종 배열은 다음과 같습니다.

1 2 3 4 5 8

Python QuickSort 예제

QuickSort에는 피벗 기능과 QuickSort 기능의 두 가지 기능이 필요합니다.

파티션 기능부터 시작하겠습니다. 이것은 피벗 요소의 값을 기반으로 배열을 분할하거나 준비합니다.

파티션 기능은 다음과 같습니다.

  1. 피벗 요소 선택
  2. 피벗보다 큰 모든 항목을 피벗 오른쪽으로 이동
  3. 피벗보다 작은 모든 항목을 피벗의 왼쪽으로 이동

QuickSort Python 프로그램

이 알고리즘을 구현하는 프로그램을 작성해 보겠습니다.

def prepare(숫자, 낮음, 높음):​​피벗 =숫자[높음] 항목 =낮음 - 1 in range(낮음, 높음):​​if 숫자[i] <=피벗:항목 =항목 + 1(숫자 [항목], 숫자[i]) =(숫자[i], 숫자[항목]) (숫자[항목 + 1], 숫자[높은]) =(숫자[높은], 숫자[항목 + 1]) 항목 반환 + 1

먼저 피벗 요소를 선택합니다. 이것은 우리 목록에서 가장 높은 숫자와 같습니다.

다음으로 Python for 루프를 사용하여 목록의 모든 항목을 반복합니다. 숫자가 피벗보다 작거나 같으면 피벗 왼쪽으로 이동합니다. 그렇지 않으면 피벗의 오른쪽으로 이동합니다.

Python 함수는 새로운 높은 값을 반환합니다. 새로운 높은 값은 항목 + 1과 같습니다.

다음으로 알고리즘을 실행해야 합니다. 별도의 함수를 작성하여 이를 수행할 수 있습니다.

def quick_sort(숫자, 낮음, 높음):​​낮으면 <높음:피벗 =준비(숫자, 낮음, 높음) quick_sort(숫자, 낮음, 피벗 - 1) quick_sort(숫자, 피벗 + 1, 높음) 

이 기능은 "낮음" 값이 "높음" 값보다 작은지 여부를 확인합니다. 그렇다면 우리의 정렬은 계속될 수 있습니다. 그렇지 않으면 정렬이 중지됩니다. 정렬이 중지되면 목록이 정렬되었음을 의미합니다.

다음으로 우리의 함수는 prepare()를 호출합니다. 방법. 이것은 피벗에 대한 포인터를 식별하고 항목을 올바른 위치로 이동합니다.

그런 다음 우리 함수는 quick_sort()를 호출합니다. 방법을 두 번. 처음으로 피벗 왼쪽에 있는 요소에 대해 QuickSort를 실행합니다. 두 번째로 피벗 오른쪽에 있는 요소에 대해 QuickSort를 실행합니다. 따라서 우리의 함수는 자신을 호출하기 때문에 재귀적입니다.

이것은 목록의 모든 항목이 정렬될 때까지 계속됩니다.

메인 메소드 작성

정렬할 목록을 정의하는 메인 프로그램을 작성해 보겠습니다.

값 =[8, 4, 5, 2, 1, 3]total_values ​​=len(values)quick_sort(values, 0, total_values ​​- 1)print(values)

먼저 정렬할 값 목록을 지정합니다. Python len() 메서드를 사용하여 값 목록의 길이를 계산합니다. 다음으로 quick_sort()를 호출합니다. 방법.

정렬하려는 숫자로 "값"을 전달합니다. 그런 다음 0을 낮은 숫자로 전달합니다. "값"의 길이에서 1을 뺀 값은 우리가 지정하는 높은 값입니다. 목록의 첫 번째 항목에 인덱스 번호가 0이므로 높은 값은 값의 길이에서 1을 뺀 것입니다.

프로그램을 실행해 보겠습니다.

[1, 2, 3, 4, 5, 8]

우리 코드는 정렬된 목록을 반환합니다! 우리는 해냈다. 등을 두드려 주세요. QuickSort는 이해하거나 구현하기가 쉽지 않습니다.

복잡성 개요

평균적으로 이 알고리즘은 O(n* log n)에서 수행됩니다. 이것은 피벗 요소가 가장 크거나 작은 요소가 아니고 피벗 요소가 중간 요소 근처에 있지 않을 때 발생합니다.

QuickSort는 O(n2)의 최악의 경우 복잡도를 가지고 있습니다. 이것은 피벗으로 선택된 요소가 가장 크거나 작은 요소일 때 발생합니다. 이 경우 피벗 요소는 항상 정렬된 배열의 끝에 있습니다. 이렇게 하면 불필요한 하위 배열이 많이 생성됩니다.

이 알고리즘의 최상의 복잡성은 O(n* log n)입니다. 이것은 피벗 요소가 중간 요소와 같거나 중간 요소 근처에 있을 때 발생합니다.

알고리즘 복잡성에 대해 자세히 알아보려면 Big O 표기법 가이드를 확인하세요.

결론

Python QuickSort는 재귀를 사용하여 목록을 더 작은 목록으로 나눈 다음 정렬합니다. 각 목록은 피벗 요소를 중심으로 정렬됩니다. 피벗보다 큰 요소는 오른쪽으로 이동합니다. 작은 요소는 피벗 왼쪽으로 이동합니다.

최고의 Python 학습 리소스, 온라인 과정 및 책에 대한 지침은 포괄적인 Python 학습 방법 가이드를 읽어보세요.