pascalabcnet/TestSuite/CompilationSamples/QuickSort.pas

56 lines
1 KiB
ObjectPascal
Raw Permalink Normal View History

// Быстрая сортировка Ч. Хоара
2015-05-14 22:35:07 +03:00
uses ArrayLib;
/// Быстрая сортировка
2015-05-14 22:35:07 +03:00
procedure QuickSort(a: array of integer);
/// Разделение a[l]..a[r] на части a[l]..a[q] <= a[q+1]..a[r]
2015-05-14 22:35:07 +03:00
function Partition(l,r: integer): integer;
begin
var i := l - 1;
var j := r + 1;
var x := a[l];
while True do
begin
repeat
Inc(i);
until a[i]>=x;
repeat
Dec(j);
until a[j]<=x;
if i<j then
Swap(a[i],a[j])
else
begin
Result := j;
exit;
end;
end;
end;
/// Сортировка частей
2015-05-14 22:35:07 +03:00
procedure sort(l,r: integer);
begin
if l>=r then exit;
var j := Partition(l,r);
sort(l,j);
sort(j+1,r);
end;
begin
sort(0,a.Length-1)
end;
const n = 20;
var a: array of integer;
begin
CreateRandom(a,n);
writeln('До сортировки: ');
2015-05-14 22:35:07 +03:00
WriteArray(a);
QuickSort(a);
writeln('После сортировки: ');
2015-05-14 22:35:07 +03:00
WriteArray(a);
end.