Programing/javascript

기수 정렬 (Radix Sort) 설명과 JavaScript 예제

2025. 5. 22. 08:37
반응형

기수 정렬(Radix Sort)은 자릿수를 기준으로 정렬하는 비교 기반이 아닌 정렬 알고리즘입니다. LSD(Least Significant Digit) 방식과 MSD(Most Significant Digit) 방식이 있으며, 일반적으로 자릿수 낮은 곳부터 정렬하는 LSD 방식이 많이 사용됩니다. 정수가 많고 자릿수가 제한된 경우 매우 빠른 성능을 발휘합니다.


1. 동작 원리 (LSD 방식 기준)

  1. 모든 숫자의 1의 자리부터 시작해 자릿수별로 정렬
  2. 10개의 큐(0~9)를 만들어 해당 자릿수의 숫자에 따라 분배
  3. 자릿수를 한 칸씩 올려가며 반복
  4. 가장 높은 자릿수까지 정렬하면 전체가 정렬됨

→ 내부적으로는 안정 정렬이 반복되어 수행됩니다.


2. JavaScript 예제 - 오름차순 정렬

function getDigit(num, place) {
  return Math.floor(Math.abs(num) / Math.pow(10, place)) % 10;
}

function digitCount(num) {
  return num.toString().length;
}

function mostDigits(nums) {
  return Math.max(...nums.map(digitCount));
}

function radixSort(nums) {
  const maxDigit = mostDigits(nums);

  for (let k = 0; k < maxDigit; k++) {
    const buckets = Array.from({ length: 10 }, () => []);
    for (let i = 0; i < nums.length; i++) {
      const digit = getDigit(nums[i], k);
      buckets[digit].push(nums[i]);
    }
    nums = [].concat(...buckets);
  }

  return nums;
}

console.log(radixSort([170, 45, 75, 90, 802, 24, 2, 66]));
// [2, 24, 45, 66, 75, 90, 170, 802]
  • getDigit: 특정 자릿수의 숫자 추출
  • digitCount: 숫자의 총 자릿수 계산
  • radixSort: 각 자릿수마다 0~9로 분류하여 정렬 반복

3. 성능 분석

구분
시간 복잡도
최선/평균/최악 O(nk)
  • n: 배열 길이, k: 최대 자릿수
  • 공간 복잡도: O(n + k)
  • 안정 정렬 (같은 값의 순서가 유지됨)

4. 기수 정렬의 특징

  • 정수 정렬에만 사용 가능 (음수/실수는 별도 처리 필요)
  • 비교 연산을 하지 않음 → 큰 장점
  • 자릿수 작은 데이터에 매우 빠름

마무리

기수 정렬은 단일 비교 없이도 빠른 정렬이 가능한 독특한 알고리즘입니다. 정수 데이터가 많고 범위가 제한적일 때 매우 유용하며, 일부 정렬 라이브러리나 내부 구현에서도 활용되기도 합니다.

배열이 크고, 자릿수 범위가 작을수록 기수 정렬의 성능이 돋보입니다.

반응형

'Programing > javascript' 카테고리의 다른 글

JavaScript canvas로 이미지 리사이즈  (1) 2025.06.26
JavaScript로 구현하는 게임 데미지 단위 축약 (A ~ ZZZZ)  (0) 2025.05.27
JavaScript로 구현하는 금액 단축 표기 (K / M / B 표기법)  (0) 2025.05.27
JavaScript로 구현하는 금액의 영어 단위 변환 (Number to Words)  (0) 2025.05.27
힙 정렬 (Heap Sort) 설명과 JavaScript 예제  (0) 2025.05.22
JavaScript 비교 연산자  (1) 2025.05.18
JavaScript 조건문  (0) 2025.05.18
JavaScript 반복문  (0) 2025.05.18
'Programing/javascript' 카테고리의 다른 글
  • JavaScript로 구현하는 금액 단축 표기 (K / M / B 표기법)
  • JavaScript로 구현하는 금액의 영어 단위 변환 (Number to Words)
  • 힙 정렬 (Heap Sort) 설명과 JavaScript 예제
  • JavaScript 비교 연산자
Dongkkase
Dongkkase
개발자로 일하면서 부딪히는 문제풀이가 누군가에게 도움이 되길 바라며
    반응형
  • Dongkkase
    정집사의 개발로그
    Dongkkase
  • 전체
    오늘
    어제
    • All (478)
      • 금융 (61)
      • Programing (295)
        • Algorithm (39)
        • API (2)
        • javascript (122)
        • CSS (8)
        • HTML (10)
        • PHP (15)
        • JAVA (27)
        • JSP (17)
        • JSP 예제 (1)
        • IOS (1)
        • Android (1)
        • Sencha Touche (1)
        • bat file, cmd (0)
        • 디버깅 (2)
        • SQL (21)
        • MS-SQL (1)
        • MySQL (13)
        • 보안 (5)
      • Server (14)
        • Docker (1)
        • Windows (9)
        • Linux (3)
        • jeus (1)
      • Database (6)
      • IT 일반 (15)
      • 리뷰 (38)
        • Book (17)
        • 제품 (2)
        • 영화 소개 (11)
        • 음악 소개 (7)
      • 잡생각 (36)
        • 회고 (3)
        • 컬럼 (4)
        • 자료실 (6)
        • 낙서장 (12)
        • 위시리스트 (2)
        • WOW (1)
        • 덕 (1)
  • 인기 글

  • 최근 댓글

  • 태그

    자바스크립트유틸
    읽고 싶은 책
    SQL
    php
    IT 관련
    js패턴
    jsp
    IT블로그
    Java
    It
    JavaScript
    자바스크립트
    기초
    IT·컴퓨터
    자바
    블로그
    위시리스트
    사고 싶은 책
    iT's MY LiFE
    디자인패턴
Dongkkase
기수 정렬 (Radix Sort) 설명과 JavaScript 예제
상단으로

티스토리툴바