首页 新闻 会员 周边 捐助

算法第四版归并算法中,sort究竟是如何运行执行的?

0
[待解决问题]

public static void merge(Comparable[] a, Comparable[] aux, int lo, int mid, int hi) {

// precondition: a[lo .. mid] and a[mid+1 .. hi] are sorted subarrays
assert isSorted(a, lo, mid);
assert isSorted(a, mid+1, hi);

// copy to aux[]
for (int k = lo; k <= hi; k++) {
aux[k] = a[k];
}

// merge back to a[]
int i = lo, j = mid+1;
for (int k = lo; k <= hi; k++) {
if (i > mid) a[k] = aux[j++];
else if (j > hi) a[k] = aux[i++];
else if (less(aux[j], aux[i])) a[k] = aux[j++];
else a[k] = aux[i++];
}

// postcondition: a[lo .. hi] is sorted
assert isSorted(a, lo, hi);
}

private static void sort(Comparable[] a, Comparable[] aux, int lo, int hi) {
if (hi <= lo) return;
int mid = lo + (hi - lo) / 2;
sort(a, aux, lo, mid);
sort(a, aux, mid + 1, hi);
merge(a, aux, lo, mid, hi);
}
我明白merge的执行过程,不明白sort的执行过程。

我实在是不明白,这部分算法的执行路径是什么?
我的思路是,比如数组a的长度是15,那么第一次调用sort调用的是sort(a,aux,0,15),程序执行到 sort(a, aux, lo, mid)时,又会再次调用这个方法,此时sort(a,aux,0,7),接下来sort(a,aux,0,3),sort(a,aux,0,1),sort(a,aux,0,0),。那么问题来了,接下来,不是一直执行if (hi <= lo) return;这条语句吗?
而且,这个方法执行过程中,是怎么反复执行sort ,merge语句的?

吃咯的主页 吃咯 | 菜鸟二级 | 园豆:202
提问于:2016-10-26 23:40
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册