Najlepszy algorytm sortowania

0

Mam zestaw danych z przypadkowymi liczbami mogą być to zupełnie losowe liczby mogą być posortowane a mogą być posortowane odwrotnie. Jaki algorytm sortowania był by najlepszy? Jak można to nich ktoś podrzuci koda :]

0

QuickSort jest faktycznie niezłym kandydatem, ale tak naprawdę nie istnieje "najlepszy algorytm sortowania". Wszystko zależy od tego:

  • ile elementów sortujemy ?
  • co sortujemy (liczność dziedziny danych) ?
  • czy sortowane elementy często się powtarzają ?

wyprzedzając dyskusję o notacji O(), powiem że jest to notacja graniczna, mająca rację bytu dla dużych ilości danych zresztą popatrzmy na takie zestawienie:

Wybrane algorytmy sortowania:
O(nn) insertionSort
O(n
logn) quickSort
O(k+n) sortowaniePrzezZliczanie (countingSort),
O(k+n) sortowanieKoszykowe (bucketSort),
O(d*n) radixSort

Tak, są algorytmy sortowania o czasie liniowym ! Wiążą się z pewnymi założeniami odnośnie tego co sortujemy (dziedziny, liczności lub rozkładu).

Ponadto insertionSort uchodzi za najszybszy algorytm sortowania jeśli liczba sortowanych elementów jest niewielka (w tej sytuacji narzut związany z rekurenyjną naturą metod n*logn jest większy od zysku wynikającego z dziel-i-rządź).

Reasumując: najlepszy ? to zależy.

0

Na stronie http://gege01.prv.pl w zakladce pomoce znajdziesz kilka sprawozdań z algorytmów i struktur danych. W spr_3 i spr_4 znajdziesz dokładne opisy wybranych metod sortowań.

Pozdrawiam.

0

Kapustka: witamy z powrotem :)
Co do sortowania... Najszybszy jest ten dla 3 elementów ;)

A tak z własnego doświadczenia, to mogę powiedzieć, że jak masz mniej niż 50 elementów, to bierz najprostszy jaki masz (chyba insertion z wymienionych przez Kapustke). Proste algorytmy dla małych ilości danych są chyba najszybsze, a na pewno najmniej się namęczysz pisząc je :)

0

To ja tylko dodam, ze jesli masz bardzo duzo danych, to jednym z najlepszych sa heap-sort oraz merge-sort (zwlaszcza oba na raz). Heap-sortem mozna posortowac za jednym zamachem srednio 2N liczb majac tylko pamieci na N*. QuickSort tego nie potrafi.

*tylko raz czytajac je wszystkie z dysku i raz zapisujac (!)

1 użytkowników online, w tym zalogowanych: 0, gości: 1