【发布时间】:2016-01-20 07:00:48
【问题描述】:
我正在学习自上而下的归并排序,并且开始了解递归部分。我见过几个实现,其中合并是通过一系列 while 循环完成的。
但是,在下面的实现中,合并操作是不同的,它是如何工作的还不清楚。它似乎只是在比较索引而不是实际元素(与我见过的其他实现不同)
private void merge(int[] aux, int lo, int mid, int hi) {
for (int k = lo; k <= hi; k++) {
aux[k] = theArray[k];
}
int i = lo, j = mid+1;
for (int k = lo; k <= hi; k++) {
if (i > mid) {
theArray[k] = aux[j++];
}
else if (j > hi) {
theArray[k] = aux[i++];
}
else if (aux[j] < aux[i]) {
theArray[k] = aux[j++];
}
else {
theArray[k] = aux[i++];
}
}
}
private void sort(int[] aux, int lo, int hi) {
if (hi <= lo)
return;
int mid = lo + (hi - lo) / 2;
sort(aux, lo, mid);
sort(aux, mid + 1, hi);
merge(aux, lo, mid, hi);
}
public void sort() {
int[] aux = new int[theArray.length];
sort(aux, 0, aux.length - 1);
}
以上代码假设全局变量theArray 存在。
【问题讨论】:
-
不应该是 int[] aux = new int[theArray.Length]; (没有 -1),然后 sort(aux, 0, theArray.Length-1) ?
标签: java algorithm sorting mergesort