private void merge(int[] array,int[] aux,int low,int mid,int hi) {
int i = low,j = mid + 1,k;
for (k = low; k <= hi; k++) {
aux[k] = array[k];
}
for (k = low; k <= hi; k++) {
if (i > mid) {
array[k] = aux[j++];
} else if (j > hi) {
array[k] = aux[i++];
} else if (aux[j] < aux[i]) {
array[k] = aux[j++];
} else /* if (aux[i] <= aux[j] */ {
array[k] = aux[i++];
}
}
}
private void sort(int[] array,int lo,int hi) {
if (hi <= lo) {
return;
}
int mid = lo + (hi - lo) / 2;
sort(array,aux,lo,mid);
sort(array,mid + 1,hi);
merge(array,mid,hi);
}
public void mergeSort() {
int aux[] = new int[n];
sort(ar,n - 1);
}
代码有效,但我很难理解它.
>我理解的目的
if (hi <= lo) {
return;
}
但我不知道返回执行后会发生什么.
>我不明白为什么合并函数中的最后一个存在.如果算法分裂直到aux为[3,5]并且我想要升序排序,则else if将比较5< 3将跳转到else,它应该交换2个值.
编辑:我使用调试器进行了一些操作,对于此示例(3 33 1 55 66 34 67 45 23),它使用前2个值到达合并功能.最后的其他如果比较33< 3并输入最后一个.如果这些值的顺序正确,这行代码的重点是什么?在数组[k] = aux [i]之后;执行时,array [0]的值与奇数相同,因为aux [i]是数组[1]
最佳答案
原文链接:https://www.f2er.com/java/437159.html