[swift] 정렬 함수를 사용하여 기수 정렬하기

기수 정렬은 정렬 알고리즘 중 하나로, 비교 연산 없이 정렬하는 알고리즘입니다. 이 알고리즘은 숫자의 자릿수를 비교하여 정렬하는 특징을 가지고 있습니다.

Swift에서는 Array 타입에 기본적으로 정렬 함수인 sorted()와 sort()를 제공합니다. 이 함수를 사용하여 기수 정렬을 구현해보겠습니다.

기수 정렬 알고리즘 구현하기

func radixSort(_ array: inout [Int]) {
    // 배열의 최대값 구하기
    guard let max = array.max() else {
        return
    }

    // 최대값의 자릿수 구하기
    var divisor = 1
    while max / divisor > 0 {
        // 버킷 배열 생성
        var buckets: [[Int]] = Array(repeating: [], count: 10)

        // 배열을 버킷에 분배
        for element in array {
            let digit = (element / divisor) % 10
            buckets[digit].append(element)
        }

        // 버킷의 순서대로 배열 재구성
        array = buckets.flatMap { $0 }

        // 자릿수 증가
        divisor *= 10
    }
}

기수 정렬 실행하기

var array = [170, 45, 75, 90, 802, 24, 2, 66]
radixSort(&array)
print(array) // [2, 24, 45, 66, 75, 90, 170, 802]

위의 코드는 주어진 배열을 기수 정렬하는 함수와 실행문입니다. 정렬 결과는 [2, 24, 45, 66, 75, 90, 170, 802]와 같이 나옵니다.

기수 정렬은 비교 연산 없이 자릿수를 이용하여 정렬하는 특징을 가지고 있어 빠른 속도로 정렬할 수 있습니다. 하지만 정렬할 데이터가 많을 경우 메모리 사용량이 크게 증가할 수 있으니 주의해야 합니다.

자세한 내용은 기수 정렬(Wikipedia)을 참고하세요.