posted by 코딩 공부중 2020. 4. 17. 12: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
38
public class mergeTest {
    public static int[] src;
    public static int[] tmp;
    
    public static void mergeSort(int start, int end) {
        if (start<end) {
            int mid = (start+end) / 2;
            mergeSort(start, mid);
            mergeSort(mid+1, end);
            
            int p = start;    //왼쪽 배열 시작 값
            int q = mid + 1;    //오른쪽 배열 시작 값
            int idx = p;    //start는 항상 mid+1보다 작기 때문에, 분할의 저장 위치는 start 지점이 된다. 그래서 int idx는 p가 된다.
 
            while (p<=mid || q<=end) {    //p가 mid이하거나 q가 end이하일 때 동작해야 한다. 미만이 아닌 이유는 원소의 개수가 1개일 때까지 쪼개기 때문이다.
 
                if (q>end || (p<=mid && src[p]<src[q])) {    //두 번째 분할의 원소를 이미 다 가져온 경우 (q> end), 첫 번째 분할에서 가져오지 않은 원소가 있고, 첫번째 분할의 첫 원소 값이 두 번째 분할의 첫 원소 값보다 작은 경우(p<=mid && src[p]<src[q])
                    tmp[idx++= src[p++]; 
                }else {
                    tmp[idx++= src[q++];
                }
            }
            
            for (int i=start;i<=end;i++) {
                src[i]=tmp[i];
            }
        }
    }
 
    public static void main(String[] args) {
        src = new int[]{198542376};
        tmp = new int[src.length];
        mergeSort(0, src.length-1);
        System.out.print(Arrays.toString(src));
    }
 
}
 
cs

'자료구조,알고리즘' 카테고리의 다른 글

맨하튼 거리 계산법  (0) 2020.09.18
(자료구조)heap  (0) 2020.04.17
색인순차검색  (0) 2020.01.03
(알고리즘) sum of subset 문제해결  (0) 2019.02.11
(알고리즘)m-coloring 문제해결  (0) 2019.02.11