[kotlin] 코틀린으로 정렬 알고리즘 구현하기

정렬 알고리즘은 데이터를 특정한 순서로 재정렬하는 알고리즘으로, 컴퓨터 과학에서 매우 중요한 주제입니다. 이번에는 코틀린으로 몇 가지 유명한 정렬 알고리즘을 구현해보겠습니다.

목차

  1. 버블 정렬 (Bubble Sort)
  2. 삽입 정렬 (Insertion Sort)
  3. 퀵 정렬 (Quick Sort)

1. 버블 정렬

버블 정렬은 단순하고 직관적인 알고리즘으로, 인접한 두 원소를 비교하여 필요에 따라 서로 교환하는 방식으로 동작합니다.

fun bubbleSort(arr: IntArray) {
    val n = arr.size
    for (i in 0 until n - 1) {
        for (j in 0 until n - i - 1) {
            if (arr[j] > arr[j + 1]) {
                val temp = arr[j]
                arr[j] = arr[j + 1]
                arr[j + 1] = temp
            }
        }
    }
}

2. 삽입 정렬

삽입 정렬은 각 원소를 적절한 위치에 삽입하여 정렬하는 알고리즘으로, 이미 정렬된 부분과 비교하여 삽입하는 방식으로 동작합니다.

fun insertionSort(arr: IntArray) {
    val n = arr.size
    for (i in 1 until n) {
        val key = arr[i]
        var j = i - 1
        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j]
            j--
        }
        arr[j + 1] = key
    }
}

3. 퀵 정렬

퀵 정렬은 분할 정복 방법을 사용하여 배열을 정렬하는 알고리즘으로, 피벗을 기준으로 작은 원소와 큰 원소로 나누어 계속 재귀적으로 정렬하는 방식으로 동작합니다.

fun quickSort(arr: IntArray, low: Int, high: Int) {
    if (low < high) {
        val pi = partition(arr, low, high)
        quickSort(arr, low, pi - 1)
        quickSort(arr, pi + 1, high)
    }
}

fun partition(arr: IntArray, low: Int, high: Int): Int {
    val pivot = arr[high]
    var i = low - 1
    for (j in low until high) {
        if (arr[j] < pivot) {
            i++
            val temp = arr[i]
            arr[i] = arr[j]
            arr[j] = temp
        }
    }
    val temp = arr[i + 1]
    arr[i + 1] = arr[high]
    arr[high] = temp
    return i + 1
}

이렇게 코틀린으로 버블 정렬, 삽입 정렬, 퀵 정렬을 구현해보았습니다. 각 정렬 알고리즘의 동작 방식을 이해하고, 실제로 구현해보면서 알고리즘에 대한 깊은 이해를 얻을 수 있을 것입니다.