|
#1
|
|||
|
|||
Сортировка
Кто нибудь может дать хорошие ссылки на виды сортировок? А Да! Какая самая быстрая?
|
#2
|
||||
|
||||
Сокорость звисит от объёма, есть алгоритмы, которые хорошо подходят для небольших массивов (например), а есть алгоритмы, которые эффективны для больших размеров массивов. Могу скинуть алгоритмы сортировок (на почтовый ящичек), я когда учил САОД их делал.
|
#3
|
||||
|
||||
Самая быстрая сортировка Хоара или она еще известна как "Быстрая сортировка"(кстати она не даром так названа и относится к улучшенным методам сортировок).Хорошо работает на больших объемах данных, а если ее скрестить еще с каким нибудь обычным методом(типа пузырька или простыми вставками,на крайний случай простым выбором), то будет вообще замечательно(хотя смотря как спаришь их)
есть у меня примерчик такого скрещивания: 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! |
#4
|
||||
|
||||
Если это БД на базе Acsess то
UserForm.ADOTable1.Sort:='Name ASC' где Name - Имя поля по которому сортировать, а ASC - по возрастанию (DSC по убыванию) |