Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

많은 수의 요소에 대해 빠른 정렬을 수행하는 C++ 프로그램

<시간/>

퀵 정렬 기술은 목록을 두 부분으로 분리하여 수행됩니다. 처음에 피벗 요소는 분할 알고리즘에 의해 선택됩니다. 피벗의 왼쪽 부분은 피벗보다 작은 값을 보유하고 오른쪽 부분은 더 큰 값을 보유합니다. 분할 후 동일한 절차를 사용하여 각각의 개별 목록이 분할됩니다.

여기서 우리는 정렬할 큰 배열(거의 100개 요소)을 고려하고 있습니다. 우리는 몇 가지 숫자를 가져온 다음 정렬되지 않도록 무작위 순서로 섞습니다. 그런 다음 퀵 정렬 기술을 사용하여 정렬합니다.

퀵소트 기법의 복잡성

  • 시간 복잡성 − O(n log n)(최상의 경우 및 평균 경우), O(n 2 ) 최악의 경우.

  • 공간 복잡성 - O(log n)

입력 - 정렬되지 않은 목록:90 45 22 11 22 50
출력 − 정렬 후 배열:11 22 22 45 50 90

알고리즘

파티션(배열, 하위, 상위)

입력 - 데이터 세트 배열, 하한 및 상한

출력 − 올바른 위치에서 회전

Begin pivot :=array[upper] i :=lower - 1 for j in the range lower to high, do if array[j]  

quickSort(배열, 왼쪽, 오른쪽)

입력 − 데이터 배열, 배열의 하한 및 상한

출력 - 정렬된 배열

lower  

예시 코드

#include#include#include#define MAX 100using namespace std;void random_shuffle(int arr[]) { //배열 요소를 임의의 위치로 섞는 함수 srand(time(NULL )); for (int i =MAX - 1, i> 0, i--) { int j =rand()%(i + 1); 정수 온도 =arr[i]; arr[i] =arr[j]; arr[j] =온도; }}int 파티션(int arr[], int p, int r) { int 피벗 =arr[r]; //피벗으로서의 마지막 항목 int i =p - 1; for (int j =p; j  

출력

<이전>1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 364 3 48 53 54 64 69 77 67 64 69 77 76 77 78 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100