C ++의 Quicksort에 대해 알아야 할 모든 것



이 기사는 예제를 사용하여 C ++에서 Quicksort를 구현하는 방법에 대한 상세하고 포괄적 인 지식을 제공합니다.

수많은 정렬 알고리즘이 있습니다. 애플리케이션에 적합한 것을 찾는 것은 특정 알고리즘의 성능, 시간 복잡성, 코드 길이 등과 같은 요소에 대한 간략한 이해가 필요한 작업입니다. 이 게시물에서는 C ++에서 Quicksort를 구현하는 데 필요한 모든 필수 개념을 다음 순서로 살펴 보겠습니다.

Quicksort 알고리즘 이해

처럼 병합 정렬 , Quicksort는 분할 및 정복 전략을 따릅니다. 분할 및 정복 전략을 사용하여 문제를 여러 하위 문제로 나누고 재귀 적으로 해결합니다. 먼저 전체 프로세스를 단계별로 이해하고 그 후에 예제를 통해 전체 프로세스에 대한 깊은 이해를 발전시킬 것입니다.





  1. 먼저 사용자에게 정렬되지 않은 배열을 요청합니다.

  2. 정렬되지 않은 배열이 있으면 배열에서 피벗 값을 선택해야합니다. 우리는 모든 값을 선택할 수 있습니다.



  3. 피벗 포인트를 선택한 후에는 배열의 다른 요소를 배열해야합니다. 피벗 값보다 작은 모든 요소는 피벗 값의 오른쪽에 배치하고 피벗보다 큰 모든 요소는 배치해야합니다. 값은 피벗 값의 오른쪽에 배치됩니다.

  4. 정렬 된 배열을 얻을 때까지 3 단계를 수행합니다.

이제 예제를 고려하고 알고리즘을 구현하고 작동 방식을 살펴 보겠습니다.



안녕하세요 [5, 4, 1, 11, 9, 6, 2, 3]이 예에서는 항상 피벗을 목록의 가장 오른쪽 요소로 간주합니다.

devops 도구의 주기율표

C ++의 Quicksort

각 단계를 살펴보고 문제를 해결하는 데 사용한 논리를 이해하겠습니다.

  • 먼저 '3'을 피벗으로 선택하고 오른쪽에 '3'보다 작은 모든 요소와 오른쪽에 '3'보다 큰 모든 요소를 ​​정렬했습니다.

  • 이 시점에서 두 가지 하위 문제가 있습니다. 먼저 오른쪽의 하위 문제를 해결하겠습니다. 하나를 피벗으로 선택하고 오른쪽에‘2’를 배치했습니다.

    SQL Server에서 피벗 및 피벗 해제
  • 두 번째 하위 문제를 해결하기 위해 '6'을 피벗으로 선택하고 앞에서 설명한대로 요소를 배치합니다.

  • 2 개의 하위 문제가 더 있습니다. 첫 번째는 피벗으로 4를 선택하여 해결되고 두 번째는 피벗으로 9를 선택하여 해결됩니다. 마지막으로 밑줄 색인에 요소가있는 정렬 된 배열이 있습니다.

노트- 여기서 이해해야 할 중요한 점은 모든 작업이 동일한 어레이에서 발생한다는 것입니다. 새 어레이가 생성되지 않습니다.

C ++에서 Quicksort를위한 의사 코드

QuickSort (array [], start_index, end_index) {if (start_index

C ++의 Quicksort 프로그램

우리는 알고리즘을 이해하고 알고리즘 작동에 대한 깊은 이해를 발전 시켰습니다. C ++로 Quicksort를 구현하고 배열을 정렬하는 프로그램을 작성해 보겠습니다.

#include using namespace std void swap_elements (int * a, int * b) {int temp = * a * a = * b * b = temp} int partition (int array [], int start_index, int end_index) {int pivot = array [end_index] int i = (start_index-1) for (int j = start_index j<= end_index- 1 j++) { if (array[j] <= pivot) { i++ swap_elements(&array[i], &array[j]) } } swap_elements(&array[i + 1], &array[end_index]) return (i + 1) } void quickSort(int array[], int start_index, int end_index) { if (start_index < end_index) { int partition_index = partition(array, start_index, end_index) quickSort(array, start_index, partition_index - 1) quickSort(array, partition_index + 1, end_index) } } void printArray(int array[], int number) { int i cout<<'Sorted Array: ' for (i = 0 i < number i++) cout << array[i] << ' ' cout << endl } int main() { int Hello[30] int i int NumberofElements cout<>NumberofElements 비용<<'Enter the elements one by one: ' for(i=0i>Hello [i]} quickSort (Hello, 0, NumberofElements-1) printArray (Hello, NumberofElements) return 0}

산출:

시간 복잡성

정렬 알고리즘의 가장 중요한 측면, 즉 시간 복잡성에 대해 이야기 해 보겠습니다. 다양한 시나리오에서 알고리즘의 성능에 대해 알려줍니다. 이러한 값은 애플리케이션에이 알고리즘을 사용할 수 있는지 결정하는 데 도움이 될 수 있습니다.

  • 최고의 사례 의 위에)
  • 평균 사례 (nlogn)
  • 최악의 경우- 의 위에2)

이것으로이 Quicksort in C ++ 기사를 마칩니다. 자세한 내용은 다음을 확인하십시오. 신뢰할 수있는 온라인 학습 회사 인 Edureka에서 제공합니다. Edureka의 Java J2EE 및 SOA 교육 및 인증 과정은 Hibernate & Spring과 같은 다양한 Java 프레임 워크와 함께 핵심 및 고급 Java 개념 모두에 대해 교육하도록 설계되었습니다.

질문이 있으십니까? 이 블로그의 댓글 섹션에 언급 해 주시면 가능한 한 빨리 답변을 드리겠습니다.