Сортировка Хоора для массива

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
program quicksort;
TYPE
t=array [1..10] of integer;
VAR a:t;I:integer;
Procedure sort ( l,r:integer);
var i,j,x,w,n,m:integer;
BEGIN
Begin
i:=l;j:=r; x:=a[(i+j) div 2];
{writeln('Enter into sort',' x=',x,' l=',l,' r=',r);}
Repeat {цикл частичного упорядочения массива относительно выбранного значения X}
While a[i]<x do i:=i+1; {поиск первого меньшего элемента слева}
While x<a[j] do j:=j-1; {поиск первого большего элемента справа}
If i<=j then
Begin {рокировка элементов}
w:=a[i];a[i]:=a[j]; a[j]:=w;
i:=i+1; j:=j-1;
{writeln('=====');
For m:=1 to 10 do
Write(a[m]:4);
End;}
Until i>j;
If l<j then {сортировка левой части}
Begin
{writeln('sort left',' l=',l:2,'j=',j:2);}
sort (l,j);
{ writeln('result sort left');
For m:=1 to 10 do
Write(a[m]:4); writeln; }
End;
If i<r then {сортировка правой части}
Begin
{ writeln('sort right',' r=',r:2,'i=',i:2); }
sort(i,r);
{writeln('result sort right');
For m:=1 to 10 do
Write(a[m]:4); writeln}
End;
End;
END; {конец процедуры }
BEGIN {головная программа}
Assign(input,'dan.inp');
reset(input);
Assign(output,'res.out');
rewrite(output);
writeln('исходный массив');
For i:=1 to 10 do
Begin
Read(a[i]); Write(a[i]:4);
End; writeln;
Sort(1,10); {сортировка}
writeln('результат сортировки');
For i:=1 to 10 do
Begin
Write(a[i]:4);
End ;
Close(input);
Close(output)
END.