【发布时间】:2019-10-28 17:57:14
【问题描述】:
当我阅读算法第 4 版第 2 章的问题 2.2.10 时,一个问题让我感到困惑。书上说快速合并算法的结果是不稳定的,我找不到证据。帮帮我,谢谢!
public static void sort(Comparable[] a, int lo, int hi){
if hi <= lo {
return;
}
int mid = lo + (hi - lo) / 2;
sort(a, lo, mid);
sort(a, mid+1, hi);
merge(a, lo, mid, hi);
}
// Why is the result of this sort not stable
private static void merge(Comparable[] a, int lo, int mid, int hi) {
for (int i = lo; i <= mid; i++)
aux[i] = a[i];
for (int j = mid+1; j <= hi; j++)
aux[j] = a[hi-j+mid+1];
int i = lo, j = hi;
for (int k = lo; k <= hi; k++)
if (less(aux[j], aux[i])) a[k] = aux[j--];
else a[k] = aux[i++];
}
我找不到不稳定的结果,我怎么能得到呢?
【问题讨论】:
-
好的,那么我的回答应该可以解决您在作业上取得进展所需的一切。如果您需要更多信息,请给我留言,否则请考虑在某个时候接受答案。
标签: java algorithm mergesort array-algorithms