알고리즘

예시

정렬되지 않은 배열로 가정하고, 오름차순으로 정렬 프로세스로 가정.

→ ****[170, 45, 75, 90, 802, 24, 2, 66]

소스코드 - Kotlin

fun radixSort(arr: IntArray): IntArray {
    val max = arr.maxOrNull() ?: return arr  // 최댓값 찾기

    var place = 1 // 자릿수
    while (max / place > 0) { // 자릿수 별로 호출
        countingSortByDigit(arr, place)
        place *= 10
    }

    return arr
}

fun countingSortByDigit(arr: IntArray, place: Int) {
    val output = IntArray(arr.size)
    val count = IntArray(10)

    // 자릿수 마다 발생 횟수 기록
    for (i in arr.indices) {
        val digit = (arr[i] / place) % 10
        count[digit]++
    }

    // 누적 계수
    for (i in 1..9) {
        count[i] += count[i - 1]
    }

    // 정렬된 배열 생성
    for (i in arr.size - 1 downTo 0) {
        val digit = (arr[i] / place) % 10
        output[count[digit] - 1] = arr[i]
        count[digit]--
    }

    // 기존 배열 업데이트
    for (i in arr.indices) {
        arr[i] = output[i]
    }
}

fun main() {
    val arr = intArrayOf(170, 45, 75, 90, 802, 24, 2, 66)
    println(radixSort(arr).joinToString(", "))
}

범위 및 함수 사용시 유의사항