Стабильная сортировка говорит о том, что одинаковые ключи НЕ проходят друг мимо друга после сортировки
Рассмотрим дублирующийся ключ 4
в индексе массива 8 и 9 в приведенной ниже последовательности:
a
= [5 20 19 18 17 8 4 5 4 4], гдеpivot
= 0,i
= 1,j
= 9Логика разделов говорит,
i
указатель перемещается слева направо. Перемещайтеi
до тех пор, пока значениеa[i]
не превышаетa[pivot]
.swap(a[i], a[j])
j
указатель перемещается справа налево. Переместитеj
до тех пор, пока значениеa[j]
не превыситa[pivot]
.swap(a[i], a[j])
Проделав эту процедуру два раза,
a
= [5 4 19 18 17 8 4 5 4 20] Обмен выполнен вi
= 1 иj
= 9.
a
= [5 4 19 18 17 8 4 5 4 20] Остановки наi
= 2 иj
= 8
a
= [5 4 4 18 17 8 4 5 19 20] Обмен выполнен вi
= 2 &j
= 8
Насколько я понимаю, поскольку дублирующийся ключ 4
потерял свой порядок после двух обменов, быстрая сортировка не является стабильной сортировкой.
Вопрос:
Насколько я понимаю, это причина того, что быстрая сортировка нестабильна? Если да, есть ли у нас какой-либо альтернативный подход к разделению для сохранения порядка ключа 4
в приведенном выше примере?