MergeSort
๋ค์์ผ๋ก ์กฐ๊ธ ๋ ๋ณต์กํ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ธ ๋ณํฉ ์ ๋ ฌ (Merge Sort)์ ์ฝํ๋ฆฐ์ผ๋ก ๊ตฌํํด๋ณด๊ฒ ์ต๋๋ค.
๋ณํฉ ์ ๋ ฌ์ ๋ถํ ์ ๋ณต ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ฐฐ์ด์ ๋ฐ์ผ๋ก ๋๋๊ณ ๊ฐ๊ฐ์ ์ฌ๊ท์ ์ผ๋ก ์ ๋ ฌํ ๋ค์ ๋ณํฉํ๋ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
fun mergeSort(arr: IntArray): IntArray {
if (arr.size <= 1) {
return arr
}
val middle = arr.size / 2
val left = arr.sliceArray(0 until middle)
val right = arr.sliceArray(middle until arr.size)
return merge(mergeSort(left), mergeSort(right))
}
fun merge(left: IntArray, right: IntArray): IntArray {
var leftIndex = 0
var rightIndex = 0
val result = IntArray(left.size + right.size)
for (i in result.indices) {
if (rightIndex >= right.size || (leftIndex < left.size && left[leftIndex] <= right[rightIndex])) {
result[i] = left[leftIndex]
leftIndex++
} else {
result[i] = right[rightIndex]
rightIndex++
}
}
return result
}
fun main() {
val arr = intArrayOf(38, 27, 43, 3, 9, 82, 10)
val sortedArray = mergeSort(arr)
println(sortedArray.joinToString(", "))
}
๋ณํฉ ์ ๋ ฌ์ ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋์ํฉ๋๋ค:
๋ฐฐ์ด์ ๋ฐ์ผ๋ก ๋๋๊ณ , ์ฌ๊ท์ ์ผ๋ก ๊ฐ๊ฐ์ ์ ๋ ฌ.
๊ฐ๊ฐ์ ๋ฐฐ์ด์ ์ ๋ ฌํ ํ, ๋ ๋ฐฐ์ด์ ๋ณํฉ.
๋ณํฉํ ๋๋ ๋ ๋ฐฐ์ด์ ์๋ถ๋ถ๋ถํฐ ๋น๊ตํ์ฌ ์์ ๊ฐ์ ๊ฒฐ๊ณผ ๋ฐฐ์ด์ ๋ฃ๊ณ , ๋๋จธ์ง๋ฅผ ๋ค์ ๋ถ์ ๋๋ค.
๋ณํฉ ์ ๋ ฌ์ O(n log n)์ ์๊ฐ ๋ณต์ก๋๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์์ ์ ์ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
Last updated