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

Примеры программ
Пример №1
Program MetodSort;
{Методы сортировки числовых массивов}
Const
R=10; {Длина числового массива}
Type
TInd=1..R;
TElem=Integer;
TMas=Array[TInd] Of TElem;
Procedure SortVibor(n:TInd; Var M:TMas);
{Процедура сортировки массива по возрастанию
методом выбора элементов}
Var
i,k,imin:TInd;
t:TElem;
Begin
For i:=1 To n-1
Do Begin
imin:=i; {Поиск очередного минимума}
For k:=i+1 To n
Do If M[k]<M[imin]
Then imin:=k;
{Перестановка элементов}
t:=M[i];
M[i]:=M[imin];
M[imin]:=t;
End;
End; {SortVibor}
Procedure SortObmen(n:TInd; Var M:TMas);
{Процедура сортировки массива по возрастанию
методом обмена элементов}
Var
i,k:TInd;
t:TElem;
Begin
For k:=n DownTo 2
Do For i:=1 To k-1 {Цикл сравнений и обменов}
Do If M[i]>M[i+1] {соседних элементов}
Then Begin {Перестановка элементов}
t:=M[i];
M[i]:=M[i+1];
M[i+1]:=t;
End;
End; {SortObmen}
Procedure SortObmenF(n:TInd; Var M:TMas);
{Процедура сортировки массива по возрастанию
методом обмена с флагом}
Var
i,k:TInd;
flag:Boolean;
t:TElem;
Begin
k:=n;{Начальное количество не отсортированных элементов}
Repeat
flag:=FALSE; {Нет перестановок}
For i:=1 To k-1
Do If M[i]>M[i+1]
Then Begin {Перестановка элементов}
t:=M[i];
M[i]:=M[i+1];
M[i+1]:=t;
flag:=TRUE; {Была перестановка}
End;
k:=k-1;
Until (Not flag) Or (k=1);
End; {SortObmenF}
Procedure SortVstav(n:TInd; Var M:TMas);
{Процедура сортировки массива по возрастанию
методом вставки элементов}
Var
i,j,k:TInd;
t:TElem;
Begin
For i:=2 To n
Do Begin
t:=M[i]; {Выделение текущего элемента}
j:=1;
{Поиск места вставки в отсортированной части}
While (j<i) And (M[j]<=M[i])
Do j:=j+1;
For k:=i-1 DownTo j
Do M[k+1]:=M[k]; {Сдвиг элементов}
M[j]:=t; {Вставка текущего элемента}
End;
End; {SortVstav}
Procedure SortQuick(Var a: TMas; l,r: TInd);
{Процедура быстрой сортировки массива по возрастанию}
var
i,j: TInd;
x,y: TElem;
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 SortQuick(a,l,j);
If i<r Then SortQuick(a,i,r);
End;{SortQuick}
Procedure OutMas(n:Tind; name:String; Var M:Tmas);
{Процедура вывода массива с именем}
Var
i:Tind;
Begin
Write('Числовой массив ',name,': ');
For i:=1 To n
Do Write(M[i]:3);
WriteLn;
End; { OutMas }
Const
MasA:Tmas= (10, 9, 8, 7, 6, 5, 4, 3, 2, 1);
MasB:Tmas= (19,17,15,13,11, 9, 7, 5, 3, 1);
MasC:Tmas= (20,18,16,14,12,10, 8, 6, 4, 2);
MasD:Tmas= ( 1,10, 2, 9, 3, 8, 4, 7, 5, 6);
MasE:TMas= ( 2, 9, 4,10, 7, 1, 6, 5, 3, 8);
Begin
ClrScr;
SortVibor(R,MasA); OutMas(R,'MasA',MasA);
SortObmen(R,MasB); OutMas(R,'MasB',MasB);
SortObmenF(R,MasC); OutMas(R,'MasC',MasC);
SortVstav(R,MasD); OutMas(R,'MasD',MasD);
SortQuick(MasE,1,R); OutMas(R,'MasE',MasE);
ReadLn;
End.
Пример №2
Program SortStrMatr;
{Сортировка строк матрицы по главному столбцу.
Главный столбец матрицы – это столбец с минимальным элементом}
Uses Crt; {Подключение модуля}
Const
R=10;
Type
TInd= 1..R;
TElem= Integer;
TVect= Array[TInd] of TElem;
TMatr= Array[TInd] of TVect;
{$R+}
Procedure InMatr(kstr,kstb:TInd;Var M:TMatr);
{Процедура ввода матрицы}
Var
i,j:TInd;
Begin
Writeln('Вводите матрицу по строкам:');
For i:=1 To kstr
Do Begin
For j:=1 To kstb
Do Read(M[i,j]);
ReadLn;
End;
End;{InMatr}
Function NStbMin(kstr,kstb:TInd; Const M:TMatr):TInd;
{Функция определения номера столбца с минимальным элементом}
Var
i,j:TInd;
min:TElem;
Begin
min:=M[1,1];
NStbMin:=1;
For i:=1 To kstr
Do For j:=1 To kstb
Do If M[i,j]<min
Then Begin
min:=M[i,j];
NStbMin:=j;
End;
End;{NStbMin}
Procedure SortMatr(kstr,nstb:TInd; Var M:TMatr);
{Процедура сортировки строк матрицы методом выбора}
Var
i,k,imax:TInd;
StrM:TVect;
Begin
For i:=1 To kstr-1
Do Begin
imax:=i;
For k:=i+1 To kstr
Do If M[k,nstb]>M[imax,nstb]
Then imax:=k;
StrM:=M[i];
M[i]:=M[imax];
M[imax]:=StrM;
End;
End;{SortMatr}
Procedure Okno(x1,y1,x2,y2,cf,ct:Byte);
{Процедура формирования окна на экране}
Begin
Window(x1,y1,x2,y2); {Установка параметров окна}
TextBackGround(cf); {Установка цвета фона}
TextColor(ct); {Установка цвета текста}
ClrScr; {Очистка окна}
End;{Okno}
Procedure OutMatr(kstr,kstb:TInd; Const M:TMatr);
{Процедура вывода матрицы}
Var
i,j:TInd;
Begin
For i:=1 To kstr
Do Begin
For j:=1 To kstb
Do Write(M[i,j]:4);
WriteLn;
End;
End;{OutMatr}
Var
N,M,NStb:TInd;
Matr:TMatr;
Begin
Okno(1,1,80,25,0,15); {На черном фоне белый текст}
Write('Размеры матрицы? ');
ReadLn(N,M);
Okno(1,6,38,20,2,15); {На зеленом фоне белый текст}
InMatr(N,M,Matr); {Ввод матрицы}
NStb:=NStbMin(N,M,Matr);{Поиск главного столбца}
SortMatr(N,NStb,Matr); {Сортировка строк}
Okno(40,6,80,20,3,15); {На голубом фоне белый текст}
WriteLn('Отсортированная матрица');
OutMatr(N,M,Matr);
ReadLn;
End.