public void mergeSort(int[] data, int p, int r) {
int q = (p + r) / 2;
if (p > r) {
mergeSort(data, p, q);
mergeSort(data, q + 1, r);
merge(data, p, q, r);
}
}
public void merge(int[] data, int p, int q, int r) {
int i = p;
int j = q + 1;
int k = q;
int[] temp = new int[data.length];
while (i < q && j < r) {
if (data[i] <= data[j])
temp[k++] = data[i++];
else
temp[k++] = data[j++];
}
while (i < q) {
temp[k++] = data[i++];
}
while (j < r) {
temp[k++] = data[j++];
}
for (int l = p; l < r; l++) {
data[l] = temp[l];
}
}
int q = (p + r) / 2;
if (p > r) {
mergeSort(data, p, q);
mergeSort(data, q + 1, r);
merge(data, p, q, r);
}
}
public void merge(int[] data, int p, int q, int r) {
int i = p;
int j = q + 1;
int k = q;
int[] temp = new int[data.length];
while (i < q && j < r) {
if (data[i] <= data[j])
temp[k++] = data[i++];
else
temp[k++] = data[j++];
}
while (i < q) {
temp[k++] = data[i++];
}
while (j < r) {
temp[k++] = data[j++];
}
for (int l = p; l < r; l++) {
data[l] = temp[l];
}
}
'프로그래밍 > 알고리즘' 카테고리의 다른 글
Stack(TwoStack) (0) | 2017.02.24 |
---|---|
Stack(getMin) (0) | 2017.02.24 |
문자열 rotate 체크 (0) | 2017.02.24 |
문자열 치환 (0) | 2017.02.24 |
계산기(stack) (0) | 2017.02.24 |