카운팅 정렬은 안정적인 정렬 알고리즘입니다. 카운트 정렬은 추가 배열 count_arr를 사용합니다. 여기서 i-th 요소는 배열 ARR에서 i와 동일한 값을 가진 요소의 수입니다. 그런 다음 ARRAY COUNT_ARR에 따르면 ARR의 요소는 올바른 위치로 배열됩니다.
네 단계로 나뉩니다.
1. 분류 할 배열에서 가장 크고 작은 요소를 찾으십시오.
2. 통계 I 값의 각 요소가 배열에 나타나고 배열 count_arr의 i-th 항목을 저장합니다.
3. 모든 카운트를 축적합니다 (count_arr의 첫 번째 요소에서 시작하여 각 항목 및 이전 항목이 추가됩니다)
4. 원래 배열을 반대로 통과하십시오. 각 요소 i를 count_arr (i) 새 배열의 항목에 놓고 각 요소에 대해 count_arr (i)를 1 씩 빼냅니다.
예:
코드 사본은 다음과 같습니다.
/**
* COUNT SINTTING은 비교 기반 분류 알고리즘입니다.
*이 알고리즘은 1954 년 Harold H. Seward가 제안했습니다.
* 장점은 특정 범위 내에서 정수를 정렬 할 때
* 복잡성은 ο (n+k)입니다 (여기서 k는 정수의 범위),
* 비교 정렬 알고리즘보다 빠릅니다.
*
*/
함수 카운트 업트 (ARR, MIN, MAX) {
var i, z = 0, count = [];
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;
}
}
반환 ARR;
}
// 시험
var i, arr = [];
for (i = 0; i <100; i ++) {
arr.push (math.floor (math.random () * (141));
}
카운트 조트 (ARR, 0, 140);