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

카운팅 정렬을 구현하는 C++ 프로그램

<시간/>

카운팅 정렬은 작은 숫자의 키에 따라 개체를 정렬하는 데 사용되는 안정적인 정렬 기술입니다. 키 값이 동일한 키의 수를 계산합니다. 이 정렬 기술은 서로 다른 키 간의 차이가 크지 않을 때 효율적이고 그렇지 않으면 공간 복잡성을 증가시킬 수 있습니다.

정렬 기법 계산의 복잡성

  • 시간 복잡도:O(n+r)

  • 공간 복잡도:O(n+r)

입력 − 정렬되지 않은 데이터 목록:2 5 6 2 3 10 3 6 7 8

출력 − 정렬 후 배열:2 2 3 3 5 6 6 7 8 10

알고리즘

countingSort(배열, 크기)

입력 :데이터 배열 및 배열의 ​​총 개수

출력 :정렬된 배열

최대값 시작 =배열에서 최대 요소 가져오기. i에 대해 [max+1] 크기의 카운트 배열을 정의합니다. do count[i] =0 // count 배열의 모든 요소를 ​​0으로 설정합니다. i :=1 to max do count[i] =count[i] + count[i+1] // i에 대해 수행된 누적 빈도 찾기 :=size를 1로 1만큼 감소 숫자를 저장합니다. 출력 배열에서 count[i]를 줄이면 출력 arrayEnd를 반환합니다.

예시 코드

#include#includenamespace std;void display(int *array, int size) { for(int i =1; i<=size; i++) cout < 최대) 최대 =배열[i]; } 최대 반환; //배열의 최대 요소}void countSort(int *array, int size) { int output[size+1]; 정수 최대 =getMax(배열, 크기); 정수 개수[최대+1]; //카운트 배열 생성(최대+1개의 요소 수) for(int i =0; i<=max; i++) count[i] =0; // count 배열을 모두 0으로 초기화 for(int i =1; i <=size; i++) count[array[i]]++; // count 배열의 숫자 개수를 늘립니다. for(int i =1; i<=최대; i++) count[i] +=count[i-1]; //누적 빈도 찾기 for(int i =size; i>=1; i--) { output[count[array[i]]] =array[i]; 개수[배열[i]] -=1; //동일한 숫자의 개수 감소 } for(int i =1; i<=size; i++) { array[i] =output[i]; // 출력 배열을 기본 배열에 저장 }}int main() { int n; cout <<"요소의 개수를 입력하세요:"; 신>> n; 정수 arr[n+1]; // 주어진 수의 요소로 배열 생성 cout <<"Enter elements:" <> arr[i]; } cout <<"정렬 전 배열:"; 디스플레이(arr, n); countSort(arr, n); cout <<"정렬 후 배열:"; 디스플레이(arr, n);}

출력

요소 수 입력:10요소 입력:2 5 6 2 3 10 3 6 7 8정렬 전 배열:2 5 6 2 3 10 3 6 7 8정렬 후 배열:2 2 3 3 5 6 6 7 8 10