기록

삽입 정렬 본문

[Study]/코딩테스트 연습

삽입 정렬

Dannnnnn 2023. 4. 13. 21:12
반응형

맨 왼쪽의 원소는 이미 정렬되어 있다고 가정하고,

두번째 원소부터 시작해서 왼쪽으로 순차적으로 현재 원소보다 큰 원소가 있다면 교체를 해주고,

또 다음 반복에서 그 왼쪽의 원소와 비교하여 또 큰 원소가 있다면 교체를 해주고,

이 작업을 반복하다가 마침내 현재 원소의 왼쪽 원소가 현재 원소보다 작은 경우를 만날 시에

브레이크로 중단하는 정렬 방식입니다.

 

fun main() {
    val arr = intArrayOf(2,5,3,1,6,7,0,4,8,9)

    for(i in 1 until arr.size) {
        for(j in i downTo 1) {
            if(arr[j] < arr[j-1]) {
                val temp = arr[j]
                arr[j] = arr[j-1]
                arr[j-1] = temp
            }
            else
                break
        }
    }

    println(arr.contentToString())
}

 

필요할 때만 위치를 바꾸므로 '데이터가 거의 정렬되어 있을 때' 효율적인 방식입니다.

시간복잡도는 O(n^2)이며, 이미 배열이 모두 정렬되어 있는 최상의 경우에는 O(n)의 시간복잡도를 가집니다.

반응형

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

버블 정렬  (0) 2023.04.13
선택 정렬  (0) 2023.04.13
퀵 정렬  (0) 2023.04.13
[Kotlin] 성격 유형 검사하기  (0) 2022.11.07
[Kotlin] 로또의 최고 순위와 최저 순위  (0) 2022.07.15