Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Program QuikSort;
- { Программа сортировки массива по возрастанию (неубыванию) элементов - }
- { быстрая сортировка }
- const N=10; {размерность массива}
- type Element = integer; {"заглушка" определения типа элемента массива}
- {при работе со структурированными данными }
- {(записями) тип переопределяется }
- Arr = array [1..N] of Element; {тип для определения массива, }
- {элементы которогоупорядочиваются}
- var A: Arr; {массив, элементы которого упорядочиваются }
- {Вспомогательные переменные, используемые при сортировке: }
- i: integer;
- function Key(b: Element): integer;
- {Заглучшка функции вычисления ключа элемента массива}
- begin
- Key := b {возвращает для массива чисел само значение числа}
- end;
- procedure Sort (L,R: Integer);
- { Рекурсивная процедура сортировки }
- { L - индекс левого элемента - первого в сортируемой части массива }
- { R - индекс правого элемента - последнего в сортируемой части массива}
- var i, j: Integer;
- Bar: Integer; {ключ барьерного элемента}
- W: Element; {вспомогательный элемент для обмена значений}
- begin
- i := L; j := R;
- Bar := Key(A[(L+R) div 2]); {вычисляем ключ барьерного элемента}
- {Перемещаем найденные элементы с ключами, большими барьерного из }
- {левой части, и меньшими барьерного из правой, меняя их местами: }
- repeat
- {Пропускаем элементы, удовлетворяющие условию сортировки: слева}
- {от барьерного остаются меньшие элементы, справа - большие: }
- while Key(A[i]) < Bar do inc(i);
- while Key(A[j]) > Bar 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 L < j then Sort(L, j);
- if i < R then Sort(i, R)
- end;
- begin
- writeln('Введите элементы массива:');
- for i:=1 to N do
- readln(A[i]);
- { Запускаем процедуру сортировки для всего массива - }
- { с первого до последнего элемента: }
- Sort(1, N);
- writeln('Отсортированный массив:');
- for i:=1 to N do
- writeln(A[i]);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement