티스토리 뷰

카테고리 없음

Merge sort Java 코드

더블제로스톤 2016. 9. 22. 23:42

Merge sort

전체를 하나의 단위로 분할한 후 분할한 원소를 다시 병합하며 정렬하는 방식


시간복잡도

n*log2(n)


공간복잡도(이 코드의 경우)

n


Java 코드

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
38
39
40
41
42
43
public class MergeSort {
    int[] arr; //입력 받는 배열
    int[] temp; //합칠때 사용 하는 임시 배열
    
    //배열에 입력 받기
    public MergeSort(int[] _arr){
        arr = _arr;
        temp = new int[arr.length];
    }
    
    //low~mid, mid+1~high 정렬 후 병합
    public void mergeSort(int low, int high){
        if(low >= high) return;
        int mid = (low + high) / 2;
        mergeSort(low, mid);
        mergeSort(mid+1, high);
        merge(low, mid, high);
    }
    
    //low~mid, mid+1~high 두 구간을 병합
    public void merge(int low, int mid, int high){
        //low~high 구간을 temp 배열에 저장
        for(int i=low; i<=high; i++){
            temp[i] = arr[i];
        }
        //low~mid, mid+1~high 두 구간의 값들을 각각 비교해가며 작은값 부터 원래 배열에 저장
        int curIndex = low;
        int lowIndex = low;
        int highIndex = mid+1;
        while(lowIndex <= mid && highIndex <= high){
            if(temp[lowIndex] <= temp[highIndex]) arr[curIndex++= temp[lowIndex++];
            else arr[curIndex++= temp[highIndex++];
        }
        //왼쪽 구간이 남았을 경우 마저 저장
        //오른쪽 구간은 이미 정렬된 상태로 저장되 있기 때문에 따로 처리할 필요 없음
        while(lowIndex <= mid) arr[curIndex++= temp[lowIndex++];
    }
    
    //배열 출력
    public void printArr(){
        System.out.println(Arrays.toString(arr));
    }
}
cs


댓글
최근에 올라온 글
최근에 달린 댓글
«   2024/11   »
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
Total
Today
Yesterday
글 보관함