Rozważmy, co dzieje się w trakcie podziału na następującej tablicy par, w przypadku gdy wykorzystuje się całkowitą komparator (tylko). Ciąg jest właśnie tam, więc mamy dwa elementy, które porównują, jakby były równe, ale w rzeczywistości są odróżnialne.
(4, "first"), (2, ""), (3, ""), (4, "second"), (1, "")
definicji rodzajem jest stabilny jeżeli po rodzaju, dwa elementy, które porównują jak gdyby równe (dwie 4
S) pojawiają się w tej samej kolejności, potem jak to miało miejsce wcześniej.
Załóżmy zdecydujemy 3
jako pivot. Dwa elementy 4
zakończą się po nim i przed nim 1
i 2
(jest trochę więcej niż to, ignorowałem przesuwanie osi obrotu, ponieważ jest już we właściwej pozycji, ale mówisz, że rozumiesz partycjonowanie).
Quicksorts w ogóle nie daje żadnej szczególnej gwarancji gdzie po partycji będą dwa 4
s i myślę, że większość implementacji odwróci je. Na przykład, jeśli stosujemy Hoare's classic partitioning algorithm tablica jest podzielona w następujący sposób:
(1, ""), (2, ""), (3, ""), (4, "second"), (4, "first")
co narusza stabilności sortowania.
Ponieważ każda partycja nie jest stabilna, ogólny sort nie jest prawdopodobny.
Jak zauważa Steve314 w komentarzu, sortowanie scalone jest stabilne pod warunkiem, że przy łączeniu, jeśli napotkasz takie same elementy, zawsze wyprowadzasz najpierw ten, który pochodzi z "dolnej części" dwóch połówek, które łączysz razem . Oznacza to, że każde scalenie musi wyglądać tak, gdzie "lewa" jest stroną, która pochodzi z niższego poziomu w oryginalnej tablicy.
while (left not empty and right not empty):
if first_item_on_left <= first_item_on_right:
move one item from left to output
else:
move one item from right to output
move everything from left to output
move everything from right to output
Jeżeli <=
były <
następnie scalanie nie będzie stabilne.
Oznacza to, że w wielu rodzajach nie można zagwarantować, że ta sama kolejność elementów zostanie rozłożona na tę samą równość. więc jeśli masz 1,1,2,3,5,6,7, oba na początku mogą nie być w określonej kolejności - to jest ważniejsze, gdy sortujesz określony klucz dla bardziej złożonych obiektów, oczywiście –
jest bardzo dobrze zakryty [tutaj] (http://en.wikipedia.org/wiki/Sorting_algorithm#Stability) – axiom