Czytając o różnych algorytmach sortowania, zauważyłem, że niektóre są „stabilne”, a inne nie. Co to oznacza i jakie kompromisy wiążą się na tej podstawie przy wyborze algorytmu?
Czytając o różnych algorytmach sortowania, zauważyłem, że niektóre są „stabilne”, a inne nie. Co to oznacza i jakie kompromisy wiążą się na tej podstawie przy wyborze algorytmu?
Odpowiedzi:
Sortowanie stabilne to takie, które zachowuje pierwotną kolejność zestawu danych wejściowych, przy czym algorytm porównania nie rozróżnia dwóch lub więcej elementów.
Rozważ algorytm sortowania, który sortuje karty według rangi , ale nie według koloru. Stabilny rodzaj gwarantuje zachowanie pierwotnej kolejności kart o tej samej wartości; niestabilny rodzaj nie.
Stabilne algorytmy zachowują względną kolejność elementów.
Zatem stabilny algorytm sortowania zachowa względną kolejność wartości, które są porównywalne jako równe.
Rozważmy algorytm sortowania, w którym sortujemy kolekcję punktów 2d na podstawie ich wymiaru X.
Kolekcja do sortowania: {(6, 3), (5, 5), (6, 1), (1, 3)}
Sortowane stabilne: {(1, 3), (5, 5), (6, 3), (6, 1)}
Regularne sortowanie: albo {(1, 3), (5, 5), (6, 3), (6, 1)}
, albo{(1, 3), (5, 5), (6, 1), (6, 3)}
Jeśli chodzi o kompromis ... cóż, stabilne sortowanie jest mniej wydajne, ale czasami jest to potrzebne.
Na przykład, gdy użytkownik kliknie nagłówek kolumny, aby posortować wartości w interfejsie użytkownika, uzasadnione jest oczekiwanie, że jego poprzednia kolejność sortowania zostanie zastosowana w przypadku równych wartości.