我知道有几个类似的帖子,但没有一个答案令人满意,这就是我想再次问这个问题的原因。
考虑下面的代码。这是我根据 CRLS Introduction to Algorithms 实现的快速排序
int partition(int* a, int s, int e)
{
int pivot = a[e];
int q = s-1;
for (int i = s; i <= e; i++)
{
if (a[i] <= pivot) {
q++;
int tmp = a[q];
a[q] = a[i];
a[i] = tmp;
}
}
return q;
}
void quickSort(int* a, int s, int e)
{
if (e > s) {
int q = partition(a, s, e);
quickSort(a, s, q-1);
quickSort(a, q+1, e);
}
}
稳定的排序算法保持具有相同键(即值)的记录的相对顺序。我不明白为什么快速排序不是其中之一。尽管其中不相邻的元素之间存在交换,但我仍然不明白为什么会导致不稳定。我真的希望有人可以举出例子来解释这一点。
谢谢你。