Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Пример №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 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 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...