Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Observer Pattern
- 추상팩토리패턴
- 디자인패턴
- Functional Programming
- r
- 함수형프로그래밍
- a
- 싱글톤
- 코틀린
- Kotlin
- Abstract Factory
- builderPattern
- 옵저버 패턴
- 디자인패턴 #
- 추상 팩토리
- factory method
- Design Pattern
- 빌터패턴
- 프로토타입 패턴
- F
- Singleton
- ㅓ
- PrototypePattern
- ㅋㅁ
- 팩토리 메소드
- designPattern
- El
Archives
- Today
- Total
오늘도 더 나은 코드를 작성하였습니까?
Algorithm(알고리즘) 병합 정렬(merge sort) 정리 feat. kotlin 본문
일단은 두 개 부분집합으로 쪼갠다. 더 이상 나눠지지 않을 크기만큼 1개 원소만 남을때 까지
다시 병합을 해가면서 정렬한다.
빨간색 선까지 일단 쪼깨고 그리고 합치면서 정렬한다.
합치면서 정렬하는 과정.
![](https://blog.kakaocdn.net/dn/VZvN5/btsrpaXwBeL/Kk7KtOlzpIBpy4zvbi8Rx0/img.png)
재귀적 방법으로 구현.
val arr = intArrayOf(10, 1, 5, 3, 2, 4, 7, 9, 8, 6, 5)
val sortedArr = IntArray(arr.size) { 0 }
fun merge(m: Int, middle: Int, n: Int) {
var i = m
var j = middle + 1
var k = m
// 비교하면서 정렬된 배열에 넣기.
while (i <= middle && j <= n) {
if (arr[i] <= arr[j]) {
sortedArr[k] = arr[i]
i += 1
} else {
sortedArr[k] = arr[j]
j += 1
}
k += 1
}
// 비교하고 남은 데이터도 넣어주기.
if (i > middle) {
for (idx in j..n) {
sortedArr[k] = arr[idx]
k += 1
}
}
if (j > n) {
for (idx in i..middle) {
sortedArr[k] = arr[idx]
k += 1
}
}
//원본 배열로 값을 복사
for (idx in m..n) {
arr[idx] = sortedArr[idx]
}
}
fun mergeSort(m: Int, n: Int) {
if (m < n) {
val middle = (m + n) / 2
mergeSort(m, middle)
mergeSort(middle + 1, n)
merge(m, middle, n)
}
}
fun main() {
mergeSort(0, arr.lastIndex)
println(arr.joinToString(" "))
}
'Algorithm > 개념' 카테고리의 다른 글
그래프 탐색 - 깊이우선 탐색 (DFS Depth-First Search) feat.kotlin (0) | 2023.10.12 |
---|---|
그래프(graph)의 기본 개념(feat.kotlin) (2) | 2023.10.12 |
모듈러 연산. (0) | 2023.08.26 |
Algorithm(알고리즘) 기본 정렬(sort) 정리 feat. kotlin (0) | 2023.08.17 |
Algorithm(알고리즘) 기본 수학(조합, 순열, 소수 등) 정리 feat. kotlin (0) | 2023.08.16 |