카운팅 정렬은 안정적인 정렬 알고리즘입니다. 카운팅 정렬은 추가 배열 Count_arr을 사용합니다. 여기서 i번째 요소는 정렬할 Arr 배열에서 값이 i와 동일한 요소 수입니다. 그런 다음 Arr의 요소를 Count_arr 배열에 따라 올바른 위치에 정렬합니다.
은 4단계로 나뉩니다.
1. 정렬할 배열에서 가장 큰 요소와 가장 작은 요소를 찾습니다.
2. 배열에서 값이 i인 각 요소의 발생 횟수를 계산하여 array Count_arr 항목 i
3. 모든 개수를 누적합니다(Count_arr의 첫 번째 요소부터 시작하여 각 항목을 이전 항목에 추가)
4. 원래 배열을 역순으로 탐색합니다. 각 요소를 추가합니다. (i)새 배열의 번째 항목, 각 요소에 대해 Count_arr(i)에서 1을 뺍니다.
예:
/**
* 카운팅 정렬은 비비교 기반 정렬 알고리즘입니다.
* 이 알고리즘은 Harold H. Seward가 1954년에 제안했습니다.
* 장점은 특정 범위 내에서 정수를 정렬할 때
* 복잡도가 Ο(n k)(여기서 k는 정수의 범위)입니다.
* 어떤 비교 정렬 알고리즘보다 빠릅니다.
*
*/
function countSort(arr, min, max) {
var i , z = 0, 개수 = [];
for (i = min; i <= max; i ) {
count[i] = 0;
}
for (i=0; i < arr.length; i ) {
count[arr[i]] ;
}
for (i = min; i <= max; i ) {
while (count[i]-- > 0) {
arr[z ] = i;
}
}
return arr;
}
// 테스트
var i, arr = [];
for (i = 0; i arr.push(Math.floor ( Math.random() * (141)));
}
countSort(arr, 0, 140);