Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.144.127.232] |
|
Сообщ.
#1
,
|
|
|
Покажите, пожвлуйста, простую реализацию алгоритма метода Быстрой Сортировки. А то что-то на языке вертится, а выразит не очень получается. Заранее спасибо.
|
Сообщ.
#2
,
|
|
|
Принцип работы примерно такой: процедура получает границы сортируемой области, выбираем ее центр. элемент, и переупорядочиваем элементы так, чтобы в одной части собрались элементы больше выбранного, а в другой - меньше. После этого вызываем эту процедуру для каждой из образовавшихся частей.
если не совсем понятно, то могу исходник набросать |
Сообщ.
#3
,
|
|
|
Множество способов описано[url] http://www.sources.ru/cpp/faqs/faq_forum.shtml#58[/url]
в том числе и интересующий тебя ;D ;D ;D |
Сообщ.
#4
,
|
|
|
В стандартной поставке Free Pascal есть qsort
//Copyright © 1993-98 by the Free Pascal Development Team procedure qsort(var A: array of integer); procedure sort(l,r: integer); var i,j,x,y: integer; begin i := l; j := r; x := A[ (l + r) div 2 ]; repeat while A[i] < x do inc(i); while x < A[j] do dec(j); if not (i>j) then begin y := A[i]; A[i] := A[j]; A[j] := y; inc(i); dec(j); end; until i>j; if l < j then sort(l,j); if i < r then sort(i,r); end; begin sort(0,High(A)); end; //qsort2 то же что и qsort, но сортирует в обратном порядке procedure qsort2(var A: array of integer); procedure sort(l,r: integer); var i,j,x,y: integer; begin i := l; j := r; x := A[ (l + r) div 2 ]; repeat while A[i] > x do inc(i); while x > A[j] do dec(j); if not (i>j) then begin y := A[i]; A[i] := A[j]; A[j] := y; inc(i); dec(j); end; until i>j; if l < j then sort(l,j); if i < r then sort(i,r); end; begin sort(0,High(A)); end; |
Сообщ.
#5
,
|
|
|
ну а чтобы обощить это дело, т.е. сделать приемлемым для сортировки любых данных нужно создать функцию получающую два елемента и возвращающую результат их сравнения.
|