|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
quicksort сортировка массива
Используя рекурсивный алгоритм сортировки с помощью разделения (сортировка Хоара QuickSort) упорядочить сформированный массив по неубыванию его элементов. Результат сортировки вывести в объект класса TMemo.
Код:
procedure qSort(l,r:Integer); var i,j:Integer; v:array [1..80]of Integer; w,q:integer; begin i := l; j := r; q := v[(l+r) div 2]; repeat while (v[i] < q) do inc(i); while (q < v[j]) do dec(j); if (i <= j) then begin w:=v[i]; v[i]:=v[j]; v[j]:=w; inc(i); dec(j); end; until (i > j); if (l < j) then qSort(l,j); if (i < r) then qSort(i,r); end; procedure TForm1.Button1Click(Sender: TObject); var v:array [1..80] of integer; i,n,r:integer; begin n:=memo1.lines.count; for i:=1 to (n) do v[i]:=strtoint(memo1.lines[i]); qSort(1,n); for i:=1 to (n) do memo2.lines.add (inttostr(v[i])); end; end. Мне кажется сортировка правильно выполнена |
#2
|
||||
|
||||
Сортировка работает, в чём вопрос? Если как перевернуть выводимый результат, то самое простое при заполнении в мемо
Код:
... for i := High(v) downto Low(v) do memo2.lines.add (inttostr(v[i])); ... Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
xxxmaximal (12.05.2014)
|
#3
|
|||
|
|||
не сортирует(вывод не правильный у меня по идее)
|
#4
|
||||
|
||||
Цитата:
Для решения этой проблемы, в простейшем случае просто объяви этот массив глобальным, до процедур qSort и Button1Click, и убери объявление этого массива из других мест: Код:
var v: array[1..80]of Integer; procedure qSort(l, r: Integer); var i, j: Integer; w, q: Integer; begin .....Дальше по тексту procedure TForm1.Button1Click(Sender: TObject); var i, n, r: Integer; begin .....Дальше по тексту |
Этот пользователь сказал Спасибо poli-smen за это полезное сообщение: | ||
xxxmaximal (12.05.2014)
|
#5
|
|||
|
|||
спасибо , я так сначала думал только я под type вводит
mas=array[1..80]of Integer; |