728x90
function radixSort(arr) {
let max = arr.reduce((acc, cur)=>acc > cur ? acc : cur);//최대값 찾고
let count = new Array(10).fill(0);
let output = new Array(arr.length);
for(let exp=1; exp <= max; exp*=10){ //최대값 자릿수만큼 for문을 돌림
count.fill(0); //count 0으로 초기화
arr.forEach(v => count[parseInt(v/exp)%10]++); //일의 자리, 십의자리 이렇게 높여가면서 해당하는 수가 있으면 count 개수올려줌
count.reduce((acc, cur, idx, arr) => arr[idx] = acc + cur);//count배열 누적. 인덱스로 사용하기 위함
arr.reduceRight((acc, cur)=>{ // 자리수가 같은 수에 대해 순서를 유지하기 위해 뒤에서부터 저장
acc[--count[parseInt(cur / exp) % 10]] = cur;
return acc;
}, output);
arr.forEach((v, idx, array) => array[idx] = output[idx]); //output배열을 arr배열에 넣기
}
return arr;
}반응형
'BEB > algorithm' 카테고리의 다른 글
| [자바스크립트] 부분 문자열의 합 26_LSCS (0) | 2022.11.30 |
|---|---|
| 25_robotPath (0) | 2022.11.29 |
| 23_spiralTraversal (0) | 2022.11.25 |
| [JavaScript] 배열 회전 (90도,180도,270도) (0) | 2022.11.24 |
| 머지소트 병합정렬 (1) | 2022.11.22 |
댓글