기록

퀵 정렬 본문

[Study]/코딩테스트 연습

퀵 정렬

Dannnnnn 2023. 4. 13. 01:45
반응형

기준데이터(피벗)를 설정하고 그 기준보다 큰 데이터와 작은 데이터의 위치를 바꾸는 방법

일반적인 상황에서 제일 많이 사용되는 정렬 알고리즘 중 하나.

 

평균적으로 O(NlogN)의 시간복잡도를 가지며, 최악의 경우  O(N^2)의 시간복잡도를 가진다.

 

fun main() {
    val array = intArrayOf(5,7,9,0,3,1,6,2,4,8)
    quickSort(array, 0, array.size - 1)
    // array.forEach { print("$it ") }
    print(array.contentToString())
}

fun quickSort(arr: IntArray, start: Int, end: Int) {
    if(start >= end) return

    val pivot = start
    var left = start + 1
    var right = end

    while(left <= right) {
        while(left <= end && arr[left] <= arr[pivot])
            left += 1
        while(right >= start && arr[right] >= arr[pivot])
            right -= 1

        if(left > right)
            swap(arr, pivot, right)
        else
            swap(arr, left, right)
    }

    quickSort(arr, start, right - 1)
    quickSort(arr, right + 1, end)
}

fun swap(arr: IntArray, i: Int, j: Int) {
    val temp = arr[i]
    arr[i] = arr[j]
    arr[j] = temp
}

 

반응형

'[Study] > 코딩테스트 연습' 카테고리의 다른 글

선택 정렬  (0) 2023.04.13
삽입 정렬  (0) 2023.04.13
[Kotlin] 성격 유형 검사하기  (0) 2022.11.07
[Kotlin] 로또의 최고 순위와 최저 순위  (0) 2022.07.15
[Python] 124 나라의 숫자  (0) 2021.04.21