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
|
public class Main {
public static int[] src;
public static int[] tmp;
public static void main(String[] args) {
src = new int[] { 1, 8, 5, 4, 2, 3, 7, 6 };
tmp = new int[src.length];
printArray(src);
mergeSort(0, src.length - 1);
printArray(src);
}
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;
while (p <= mid || q <= end) {
if (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 printArray(int[] a) {
for (int i = 0; i < a.length; i++)
System.out.print(a[i] + " ");
System.out.println();
}
}
|
cs |
'Algorithm' 카테고리의 다른 글
KMP(Knuth-Morris-Pratt) 알고리즘 (0) | 2022.03.10 |
---|---|
네트워크 플로우(Network Flow) 및 이분 매칭(Bipartite Matching) (0) | 2022.03.07 |
ArrayList를 활용한 모든 경우의 수 탐색 (0) | 2021.08.08 |
멱집합 (0) | 2021.07.25 |
최대합 부분배열 (0) | 2020.04.25 |