옵션 |
|
public static void mergeSort(int n, int[] s) {
int h = n/2, m = n - h;
int[] U = new int[h];
int[] V = new int[m];
if(n > 1) {
for(int i = 0; i < h; i++)
U[i] = s[i];
for(int i = 0; i < m; i++) // h + m = n
V[i] = s[i + h];
mergeSort(h,U);
mergeSort(m,V);
merge(h, m, U, V, s);
}
}
public static void merge(int h, int m, int[] U, int[] V, int[] s) {
int i, j, k;
i = 0; j = 0; k = 0; // k = Sorted Array Index
while(i < h && j < m) {
if(U[i] < V[i]) {
s[k] = U[i];
i++;
} else {
s[k] = V[j];
j++;
}
k++;
}
if(i >= h) {
while(j < m) {
s[k] = V[j];
k++;
j++;
}
} else {
while(i < h) {
s[k] = U[i];
k++;
i++;
}
}
결과는 아래처럼 분할 끝나고 합병하는 제일 처음 단계에서만 크기 비교가 이루어지구요 그 이후론 그냥 합치기만 되네요;
뭐가 문제인지 ㅠㅠ 교재 알고리즘 그대로 따라했는데도 결과가 이상하게 나오네요.