Я знаю, что есть несколько подобных сообщений, но ни один из ответов не удовлетворяет, поэтому я хочу снова задать этот вопрос.Почему быстрая сортировка нестабильна
Рассмотрите приведенный ниже код. Это моя реализация быстрой сортировки в соответствии с CRLS Введение в алгоритмы
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);
}
}
Устойчивые алгоритмы сортировки поддерживать относительный порядок записей с одинаковыми ключами (т.е. значения). Я не понимаю, почему быстрая сортировка не одна из них. Хотя в нем есть свопы между несвязанными элементами, но я до сих пор не понимаю, почему это может вызвать нестабильность. Я действительно надеюсь, что кто-то может привести примеры, чтобы объяснить это.
спасибо.
См. Этот ответ http://stackoverflow.com/a/10375393/1196603 для визуального примера – Jk1
@ Jk1: Благодарим вас за быстрый ответ. Это точный ответ, который я хочу. Это очень хорошая ссылка. Интересно, почему ответ в ссылке не выбран в качестве лучшего ответа. – eaglesky
Возможный дубликат [стабильности алогоризма быстрой сортировки] (http://stackoverflow.com/questions/13498213/quicksort-alogorithm-stability) –