티스토리 뷰

Algorithm

합병 정렬

할루루 2018. 3. 1. 15:17
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
29
30
31
32
33
34
35
36
37
func mergeSort(array: inout [Int], startIndex: Int, endIndex: Int){
    if(startIndex < endIndex){
        let midIndex = (startIndex + endIndex) / 2
        mergeSort(array: &array, startIndex: startIndex, endIndex: midIndex)
        mergeSort(array: &array, startIndex: midIndex + 1, endIndex: endIndex)
        merge(array: &array, startIndex: startIndex, midIndex: midIndex, endIndex: endIndex)
    }
}
func merge(array: inout [Int], startIndex: Int, midIndex: Int, endIndex: Int){
    var i: Int = startIndex
    var j: Int = midIndex + 1
    var k: Int = startIndex
    var tempArray: [Int= Array(repeating: 0, count: array.count)
    while(i <= midIndex && j <= endIndex){
        if(array[i] <= array[j]){
            tempArray[k] = array[i]
            i += 1
        } else {
            tempArray[k] = array[j]
            j += 1
        }
        k += 1
    }
    while(i <= midIndex){
        tempArray[k] = array[i]
        k += 1
        i += 1
    }
    while(j <= endIndex){
        tempArray[j] = array[j]
        k += 1
        j += 1
    }
    for a in startIndex...endIndex{
        array[a] = tempArray[a]
    }
}
cs



탐색할 인덱스를 점차 줄여나가는 것으로 문제를 분할한다.


합병정렬 시 여분의 배열을 만들고 그 곳에 함수의 결과를 넣어 원래 배열을 갱신한다.

'Algorithm' 카테고리의 다른 글

합병 정렬 (C)  (0) 2018.04.10
힙 정렬  (0) 2018.03.01
삽입 정렬  (0) 2018.03.01
버블 정렬  (0) 2018.03.01
선택 정렬  (0) 2018.03.01
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/02   »
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
글 보관함