Quicksort gilt als einer der schnellsten Algorithmen zum Sortieren von Daten innerhalb einer Liste/Tabelle/was auch immer. Wie auch immer, wie kommt die rosettacode Lua Implementierung dieses AlgorithmusWie kann der eingebaute Sortieralgorithmus so schnell sein?
function quicksort(t)
if #t < 2 then return t end
local pivot = t[1]
local a, b, c={}, {}, {}
for _, v in ipairs(t) do
if v < pivot then a[#a + 1] = v
elseif v > pivot then c[#c + 1] = v
else b[#b + 1] = v
end
end
a = quicksort(a)
c = quicksort(c)
for _, v in ipairs(b) do a[#a + 1] = v end
for _, v in ipairs(c) do a[#a + 1] = v end
return a
end
so viel langsamer ist (dauert etwa eine Minute alle zufällig platziert Einträge in einer eine Million Einträge Tabelle zu sortieren) im Vergleich zu den eingebauten in table.sort(table)
Algorithmus, Wich dauert nur ungefähr fünf Sekunden, um die gleiche Tabelle zu sortieren?
Lua Sprache interpretiert und Dolmetschkosten sind hoch. Versuchen Sie zumindest den gleichen Test mit LuaJIT beim Vergleich mit nativem Code. – Vlad
Quicksort ist O (n log n) im besten und durchschnittlichen Fall, aber O (n^2) im schlimmsten Fall. Nicht immer genau der schnellste Algorithmus da draußen. –
@Akshat Mahajan Noch immer erklärt dies nicht so viel Effizienzverlust, und ich bekomme ungefähr dasselbe Ergebnis, wenn ich die Tabelle in einer anderen Reihenfolge erstelle. – user6245072