当我读《算法》第二章问题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++];
}
我找不到结果不稳定的原因,怎么才能得到稳定的结果?