Показать сообщение отдельно
  #9  
Старый 27.12.2008, 19:02
Grunch Grunch вне форума
Новичок
 
Регистрация: 08.04.2008
Адрес: Краснодар
Сообщения: 52
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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}
Ответить с цитированием