이것은 비비교 정렬 기술의 예입니다. 항목의 개수와 가능한 키 값의 범위가 거의 같은 경우에 사용합니다.
이런 종류의 작업을 수행하려면 몇 가지 구멍을 만들어야 합니다. 필요한 구멍의 수는 숫자의 범위에 의해 결정됩니다. 각 구멍에는 항목이 삽입됩니다. 마지막으로 구멍에서 삭제되고 정렬된 순서를 위해 배열에 저장됩니다.
비둘기 구멍 정렬 기법의 복잡성
- 시간 복잡도:O(n+2^k)
- 공간 복잡성:O(2^k)
입력 및 출력
입력:정렬되지 않은 목록:802 630 20 745 52 300 612 932 78 187출력:정렬 전 데이터:802 630 20 745 52 300 612 932 78 287정렬 후 데이터:802 630 20 745 52 300 612 932 78 287>알고리즘
pigeonHoleSort(배열, 크기)입력 - 데이터 배열 및 배열의 총 개수
출력 - 정렬된 배열
배열 목록에서 최대 및 최소 찾기 시작 holeRange :=최대 – 최소 +1 i에 대한 목록의 holeRange 수 정의 :=0 ~ n-1 do hole[array[i]-min].append(array[i ]) done count :=0 for j :=0 to holeRange-1 do array[count] do array[count] :=hole[j]의 첫 번째 노드를 가져오고 삭제 count :=count +1 done 끝예시
#include#include #include
네임스페이스 사용 std;void getMaxMin(int *arr, int n, int &maximum, int &minimum) { maximum =minimum =arr[0]; //초기 최대 및 최소 ar arr[0] for(int i =1; i maximum) maximum =arr[i]; //최대 데이터 가져오기 if(arr[i] <최소) minimum =arr[i]; //최소 데이터 가져오기 }}void pegionHoleSort(int *arr, int n) { int max, min; getMaxMin(arr, n, 최대, 최소); 정수 구멍 범위 =최대 - 최소 +1; 목록 구멍[구멍 범위]; //구멍 배열 생성 for(int i =0; i > n; 정수 [n]; // 주어진 수의 요소로 배열 생성 cout <<"Enter elements:" < > arr[i]; } cout <<"정렬 전 데이터:"; 디스플레이(arr, n); pegionHoleSort(arr, n); cout <<"정렬 후 데이터:"; 디스플레이(arr, n);} 출력
요소 수 입력:10요소 입력:802 630 20 745 52 300 612 932 78 187정렬 전 데이터:802 630 20 745 52 300 612 932 78 187정렬 전 데이터:802 630 20 745 52 300 612 932 78:728 사전>