Показать сообщение отдельно
  #3  
Старый 19.11.2006, 23:53
Аватар для Rom@NS
Rom@NS Rom@NS вне форума
Прохожий
 
Регистрация: 05.11.2006
Адрес: Россия
Сообщения: 18
Репутация: 10
По умолчанию

Самая быстрая сортировка Хоара или она еще известна как "Быстрая сортировка"(кстати она не даром так названа и относится к улучшенным методам сортировок).Хорошо работает на больших объемах данных, а если ее скрестить еще с каким нибудь обычным методом(типа пузырька или простыми вставками,на крайний случай простым выбором), то будет вообще замечательно(хотя смотря как спаришь их)
есть у меня примерчик такого скрещивания:

unit Sorts;

interface
const n=10000; min=100;
Type
Tindex=1..n;
Tarray=array[Tindex]of integer;
procedure Simple_Choice(var A:TArray;down,Up:integer);
procedure Quick_Rec(var A:TArray;n:integer);




implementation


uses grfunc_;
procedure Simple_Choice(var A:TArray;down,up:integer);
var i,j,k:Integer;
Elem:Integer;
begin
for j:=Up downto down+1 do
begin
{ищем максимум среди элементов от j до 1
местоположение максимального элемента запоминается в переменной i}
i:=j;
for k:=j-1 downto down do
if A[i]<A[k]
then i:=k;
{i и j меняются местами}
elem:=A[j];
A[j]:=A[i];
A[i]:=elem;
count:=count+1;
end;
end;


procedure Quick_Rec(var A:TArray;n:integer);
procedure QuickSort(left,right:Integer);
var i,j:integer;
Elem:Integer;
begin
{если есть что сортировать}
if left<right
then
begin
{запоминаем указатель на левый и правый сравниваемые элементы}
i:=left;j:=right;
{до тех пор пока указатели не пересекутся}
while i<j do
begin
{ищем элемент справа, который был бы меньше, чем элемент слева}
while (i<j) and (A[j]>=A[i]) do j:=j-1;
//меняем местами
Elem:=A[i];
A[i]:=A[j];
A[j]:=Elem;
count:=count+1;
{ищем эелемнт слева, который был бы больше, элемент справа}
while (i<j)and(A[j]>=A[i])do i:=i+1;
//меняем местами
Elem:=A[i];
A[i]:=A[j];
A[j]:=Elem;
end;

//сортируем левую часть
if (i-1)-left<min
then
Simple_Choice(A,left,i-1)
else
QuickSort(left,i-1);

//сортируем правую часть
if right-(j+1)<min
then
Simple_Choice(a,j+1,right)
else
QuickSort(j+1,right);
end;
end;
begin
QuickSort(1,N);
end;
end.


Вообще сортировки в вирте не плохо описаны, там и сложность алгоритмов указана и скорость относительно друг друга!можно кнута почитать, там по внешним сортировкам кое что есть.
__________________
VSU, AMM, Software and administration of information systems
We are the best among the best!
Ответить с цитированием