Home Special Sort Algorithm - Radix Sort
Post
Cancel

Special Sort Algorithm - Radix Sort

기수 정렬


기수 정렬은 입력이 모두 k 자릿수 이하의 자연수인 특수한 경우(자연수가 아닌 제한된 종류를 가진 알파벳 등도 해당)에 사용할 수 있는 정렬 방법입니다.

기수 정렬은 평균 시간 복잡도가 \(\theta(n)\)으로 소요되는 알고리즘 입니다.

우선 가장 낮은 자릿수만 가지고 모든 수를 재배열(정렬) 합니다. 그리고 같은 방법으로 더 이상 자릿수가 남지 않을 때까지 반복합니다. 여기서 ‘안정성을 유지하면서 정렬한다’는 사실이 매우 중요한데, 값이 같은 원소끼리는 정렬 후에 원래의 순서가 바뀌지 않는 성질임을 뜻합니다. (stable sort)

구현


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# Counting sort 사용

def countingsort(array, place):
    size = len(array)
    output = [0] * size
    count = [0] * 10

    # calculate count of elements
    for i in range(0, size):
        index = array[i] // place
        count[index % 10] += 1
    
    # calculate cumulative count
    for i in range(1, 10):
        count[i] += count[i-1]
    
    # place the elements in sorted order
    i = size - 1
    while i >= 0:
        index = array[i] // place
        output[count[index % 10] - 1] = array[i]
        count[index % 10] -= 1
        i -= 1
    
    for i in range(0, size):
        array[i] = output[i]


# radix sort 

def radixsort(array):

    # get maximum element
    max_element = max(array)

    # apply counting sort to sort elements based on place value
    place = 1
    while max_element // place > 0:
        countingsort(array, place)
        place *= 10
    return array

test_data = [842, 9, 4810, 582, 990, 5592, 42]
print(radixsort(test_data))



시간 복잡도


기수 정렬은 평균 시간 복잡도와 최악 시간 복잡도 모두 \(\theta(n)\)으로 빠른 정렬 알고리즘입니다.

This post is licensed under CC BY 4.0 by the author.