추가 메모리 없이 구현하는 라디스 정렬
초록
이 논문은 워드 크기가 O(log n)인 정수들을 O(n) 시간에 정렬하면서 추가 메모리를 O(1) 워드만 사용하는 새로운 인플레이스(radix) 정렬 알고리즘을 제시한다. 또한 키가 읽기 전용인 경우와 임의의 정수 범위
상세 분석
본 논문은 기존의 라디스 정렬이 O(n) 시간에 수행되지만 O(n)개의 보조 워드를 필요로 하는 한계를 극복하고자 한다. 핵심 아이디어는 “버킷” 역할을 하는 메모리 영역을 실제 입력 배열 자체에 재배치함으로써, 외부 버퍼 없이도 각 비트 혹은 비트 그룹별로 데이터를 분배하고 수집할 수 있다는 점이다. 구체적으로, 입력 배열을 일정 크기의 “슬롯”으로 나누고, 각 슬롯 안에서 순환 교환(cycle‑swap) 방식을 적용한다. 이 과정에서 각 슬롯은 현재 처리 중인 라디스 단계의 키값에 따라 목표 위치를 계산하고, 이미 정렬된 부분은 그대로 유지하면서 미정렬 원소들을 제자리에서 이동시킨다.
알고리즘은 안정성을 보장한다. 이는 동일한 키를 가진 원소들이 원래의 상대 순서를 유지하도록, 교환 순서를 역순이 아닌 앞에서 뒤로 진행하도록 설계했기 때문이다. 또한 워드 크기가 O(log n)인 경우, 한 번에 처리할 수 있는 비트 수를 적절히 선택하면 전체 라디스 단계 수가 O(1) 수준으로 제한된다. 따라서 전체 복잡도는 O(n)·O(1)=O(n) 시간이 된다.
읽기 전용 키에 대한 확장은 “인덱스 배열”을 이용해 키값을 간접적으로 참조하는 방식으로 구현된다. 이때도 추가 메모리는 O(1) 워드에 국한된다. 핵심은 인덱스 배열 자체를 입력 배열에 겹쳐 저장하고, 필요한 경우에만 일시적으로 한두 개의 워드만을 임시 변수로 사용하는 것이다.
마지막으로 임의의 상수 c에 대해