Быстрая сортировка

При этом виде сортировке массив разбивается на две части, а затем рекурсивно вызывает сама себя для их сортировки. Притом элементы первой части меньше любого элемента второй части. Рассмотрим данный вид сортировке на примере: Если алгоритм вызывается для списка, который содержит нуль или один элемент, то подписок уже отсортирован и процедура заканчивается, в противном случае выбирается один элемент, относительно которого список разбивается на две части, в первый подписок идут элементы меньше выбранного, во второй больше. И затем, как уже было сказано, она рекурсивно вызывает сама себя для сортировки обои подсписков.

const

max = 1000;

type

list = array[1..max] of integer;

var

data: list;

i: integer;

procedure quicksort(var a: list; Lo,Hi: 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 i:=i+1;

while x<a[j] do j:=j-1;

if i⇐j then

begin

y:=a[i]; a[i]:=a[j]; a[j]:=y;

i:=i+1; j:=j-1;

end;

until i>j;

if l<j then sort(l,j);

if i<r then sort(i,r);

end;

begin {quicksort};

sort(Lo,Hi);

end;

Назад