Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
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 OutMas(n:TInd; name:String; Var M:TMas);
{Процедура вывода массива с именем}
Var
i:TInd;
Begin
WriteLn('Числовой массив ',name,': ');
For i:=1 To n
Do Write(M[i],' ');
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);
Begin
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);
ReadLn;
End.
Дата публикования: 2014-11-03; Прочитано: 325 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!