Effektive funktionelle Art
Frage
Ich programmiere eine Funktion für einen TINspire , so kann ich ‚t verwenden, um den von innen builtins einer Funktion. Was ist die Regel effizienter Algorithmus für eine Liste von Zahlen Sortierung ohne die Änderung der Liste selbst? (Rekursion und list-Splitting ist Freiwild, wie die allgemeine Verwendung von math.)
Lösung
Mergesort ist unkompliziert, einfach, effizient und stabil. Die Liste verteilen, sortieren rekursiv, und die Ergebnisse zusammenführen
Um genauer zu sein, nimmt mergesort O (N log N), die sich asymptotisch optimal ist. Auch in der Praxis (mit beiden Algorithmen zu sortieren kurzen Sublisten mit einer Spezial-Art modifizieren), mergesort kann ein enger Konkurrent sein, um den quicksort in den C / C ++ Standard-Bibliotheken verwendet, modifiziert werden.
Edit:. Im Gegensatz zu in-Place-Sorten wie quicksort und Insertionsort, mergesort erfordert Hilfsspeicher, und ist am einfachsten durch implementieren Kopieren statt tauschen
Andere Tipps
Timsort verwendet wird, in Python und Java SE 7. Es vereint das Beste von Mergesort und Insertionsort. Insertion Sort ist O (n ^ 2), aber mit kleinen Listen von Zahlen ist es schneller als Mergesort!
So können Sie diese als generischen Sortieralgorithmus hier wie angegeben verwenden