Re: Алгоритмы сортировк
- From
- Artur Mogozov (2:5002/7.6)
- To
- Vlad Salikov
- Date
- 2002-12-11T16:28:30Z
- Area
- RU.ALGORITHMS
Привет, Vlad!
09 Дек 02 02:39, Vlad Salikov писал Kirill Usatov:
AV>>> Хотелось бы поиметь ОЧЕНЬ быстрый алгоритм сортировки
AV>>> одномерного набора чисел (как по возрастанию так и по убыванию).
AV>>> Набор относительно большой (м.б. до 10000 значений). Смотрю на
AV>>> Excel и так завидно становится, как там все мгновенно
AV>>> происходит. :))
KU>> поимей метод Хоаpа Ж)
VS> А где бы его поиметь?
Быстрая сортировка.
Данный метод был предложен Хоаром в 1962 году. В общем случае его
эффективность довольно высока ( O(n*log n) ), поэтому автор назвал его "быстрой
сортировкой". Такая эффективность достигается за счет отсечения ненужных
перестановок для уже отсортированного массива.
Алгоритм.
В исходном массиве А выбирается некоторый элемент Х ("барьерный"). Целью я
вляется запись Х на "свое место" в массиве, пусть это будет место k, такое,
чтобы слева от Х были элементы меньше, либо равные, а справа большие Х. То есть
A[1], A[2], ..., A[K-1], A[K]=X, A[K+1], ..., A[N].
В результате массив А разделен на две неупорядоченные части, барьером между
которыми является A[k]. Далее требуется сортировать полученные части таким же
образом до тех пор, пока в каждой части не останется по одному элементу, то есть
пока не будет отсортирован весь массив.
Программа.
Procedure QuickSort(m,t:Integer); {Первый вызов QuickSort(1,N)}
Var
i,j,x,w:Integer;
Begin
i:=m;
j:=t;
x:=a[ (m+t) div 2 ]; {}
Repeat
While a[i] < x do Inc(i);
While a[j] > x do Dec(j);
If i <= j Then
Begin
w:=a[i];
a[i]:=a[j];
a[j]:=w;
Inc(i);
Dec(j);
End;
Until i > j;
If m<j Then QuickSort(m,j);
If i<t then QuickSort(i,t);
End;
Вот и все.
Best regards, Artur. CU, Vlad!
... Голубые ели, спали и орали
--- GoldED+/W32 1.1.5-20011123
* Origin: ю жизнь. Сохpанить? (Да/Нет) (2:5002/7.6)