본문 바로가기
BEB/algorithm

[Javascript] 기수정렬

by ddanss 2022. 11. 28.
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

댓글