1
我正在學習自頂向下mergesort,我開始理解遞歸部分。我已經看到了幾個實現了一系列while循環的合併。自上而下mergesort。合併操作不明確
但是,在下面的實現中,合併操作是不同的,它並不清楚它是如何工作的。這似乎只是比較指標,而不是實際的元素(不像其他實現我見過)
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),然後排序(aux,0,theArray.Length-1)? – rcgldr