숫자 배열을 받아 카운팅 정렬 알고리즘을 사용하여 정렬하는 JavaScript 함수를 작성해야 합니다.
최대값을 알면 계수 정렬 알고리즘을 사용하여 선형 시간 및 공간에서 숫자 배열을 정렬할 수 있습니다. 최대값을 사용하여 해당 크기의 배열을 만들어 각 인덱스 값의 발생 횟수를 계산합니다.
그런 다음 0이 아닌 개수가 있는 모든 인덱스를 결과 배열로 추출합니다.
우리는 먼저 하나의 루프를 사용하여 배열의 가장 큰 요소를 찾을 것이며, 일단 배열을 정렬하기 위해 카운팅 정렬을 사용할 것입니다.
예시
const arr = [4, 3, 1, 2, 3];
const findMaximum = arr => arr.reduce((acc, val) => val > acc ? val: acc, Number.MIN_VALUE)
const countingSort = (arr = []) => {
const max = findMaximum(arr);
const counts = new Array(max + 1);
counts.fill(0);
arr.forEach(value => counts[value]++);
const res = [];
let resultIndex = 0;
counts.forEach((count, index) => {
for (let i = 0; i < count; i++) {
res[resultIndex] = index;
resultIndex++;
};
});
return res;
};
console.log(countingSort(arr)); 출력
콘솔의 출력은 -
[ 1, 2, 3, 3, 4 ]