Цитата:
Сообщение от Stud555
А есть ли алгоритмы быстрее Шелла? Нужно сортировать по одному полю. Вида 56.012345678
|
Конечно есть. Сложность алгоритма Шелла - О(n*log^2(n)), алгоритм быстрой сортировки имеет сложность О(n*log(n)). Уже на 10000 элементов скорость его работы должна быть больше.
Код:
procedure quicksort(var a: list; Lo,Hi: integer);
procedure sort(l,r: integer);
var
i,j,x,y: integer;
begin
i:=l; j:=r; x:=a[random(r-l+1)+l]; { x := a[(r+l) div 2]; - для выбора среднего элемента }
repeat
while a[i]<x do i:=i+1; { a[i] > x - сортировка по убыванию}
while x<a[j] do j:=j-1; { x > a[j] - сортировка по убыванию}
if i<=j then
begin
if a[i] > a[j] then {это условие можно убрать} {a[i] < a[j] при сортировке по убыванию}
begin
y:=a[i]; a[i]:=a[j]; a[j]:=y
end;
i:=i+1; j:=j-1
end;
until i>j;
if l<j then sort(l,j);
if i<r then sort(i,r)
end; {sort}