Простые методы сортировки массивов: перестановкой, обменом, вставками

Сортировка - это процесс упорядочивания информации по определенному признаку. Цель сортировки - облегчение последующего поиска элементов. Это почти универсальный вид обработки информации, с которым мы встречаемся в жизни повсеместно.

Пример. Разработать программу сортировки элементов массива А(n), где n < 20, используя метод выбора, метод вставки и метод обменов.

Метод выбора. Сортировка посредством выбора представляет собой один из самых простых методов сортировки. Он предполагает такую последовательность действий. Сначала находим минимальный элемент массива. Найденный элемент меняем местами с первым элементом. Затем повторяем процесс с п-1 элементами, начиная со второго, потом с п-2 элементами, начиная с третьего и т.д. до тех пор, пока не останется один, самый большой элемент массива.

Приведем текст программы, реализующий данный алгоритм.

Program sortl;

Var a: array [1..20] of real;

j, i, n, imin: integer;

min:real;

Begin

WritelnCВведите количество чисел п<=20:');

Readln(n);

Writeln('Введите массив:');

for i:=l to n do Read(a[i]);

Readln;

for j:=l to n-1 do {цикл поиска минимальных элементов массива}

begin

min:=a[j]; {начальное значение для поиска минимума}

imin:=j; {начальное значение индекса минимального элемента}

for i:=j+l to n do {цикл поиска минимума и его индекса}

if a[i]<min then {если элемент меньше уже найденного минимального}

begin min:=a[i]; {запоминаем

элемент}

imin:=i {запоминаем его индекс}

end;

{меняем местами найденный минимум и первый элемент текущего массива}

a[imm]:=a[j];

a[j]:=min;

end;

for i:=l to n do Write(a[i]:6:2);

Writeln;

End.

 

Метод вставки. Сортировку вставками можно описать следующим образом. В исходном состоянии считают, что сортируемая последовательность состоит из двух последовательностей: уже сортированной (она на первом шаге состоит из единственного - первого элемента) и последовательности элементов, которые еще необходимо сортировать. На каждом шаге из сортируемой последовательности извлекается элемент и вставляется в первую последовательность так, чтобы она оставалась сортированной. Поиск места вставки осуществляют с конца, сравнивая вставляемый элемент ai с очередным элементом сортированной последовательности аj. Если элемент ai больше аj, его вставляют вместо aj+1, иначе сдвигают аj вправо и уменьшают j на единицу. Поиск места вставки завершают, если элемент вставлен или достигнут левый конец массива. В последнем случае элемент ai вставляют на первое место.

Разрабатывая алгоритм, избавимся от проверки достижения начала массива. Прием, позволяющий отменить эту проверку, называется «проверка с барьером». С использованием этого приема проверка организуется так, чтобы из цикла поиска места вставки в любом случае происходил выход по первому условию. Для этого достаточно поместить вставляемый элемент перед первым элементом массива, как элемент с индексом 0. Этот элемент и станет естественным барьером для ограничения выхода за левую границу массива. Приведем текст программы, реализующей данный алгоритм.

Program sort2;

Vara:array[0..20] of real;

B:real;

i,j,n: integer;

Begin

WriteLn('Введите количество чисел п<=20.');

ReadLn(n);

WriteLn('Введите массив.');

for i:=l to n do Read(a[i]);

ReadLn;

for i:-2 to n do {начиная со второго элемента до конца массива}

begin

B:=a[i]; {запоминаем i-й элемент}

а[0]:=В; {этот же элемент записываем в а[0] - это барьер}

j:=i-l; {индекс i запоминаем в j}

while B<a[j] do {пока очередной рассматриваемый элемент больше 1-го элемента} begin

a[j+1]:=a[j]; {сдвигаем элемент}

j:=j-l; {уменьшаем j на 1}

end;

a[j+1]:=B; {как только найдено место, туда записывается В}

end;

WriteLh('Отсортированный массив:');

for i:=l to n do Write(a[i]:6:2);

WriteLn;

End.

 

Метод обменов. Алгоритм прямого обмена основывается на сравнении пары соседних элементов. Если расположение элементов не удовлетворяет условиям сортировки, то их меняют местами. Сравнения и перестановки продолжают до тех пор, пока не будут упорядочены все элементы. Определить, что элементы упорядочены, можно, считая количество выполненных перестановок: если количество перестановок равно нулю, то массив отсортирован.

Приведем программу, реализующая данный алгоритм.

Program ex;

Var a: array [1..20] of Real;

i,j,n,l,k: integer;

b:real;

Begin

WriteLn( "Введите размер массива N< =20 ');

ReadLn(n);

for i := 1 ton do Read(a[i]);

ReadLn;

WriteLn( 'Исходный массив: ');

for i := 1 to n do Write(a[i]:7:2);

WriteLn;

k:=l; {количество перестановок, начальное значение не равно 0 }

i:=l; {номер очередного просмотра, в начале равен 1 }

while k<>0 do {пока есть перестановки}

begin

k:=0; {обнуляем количество перестановок}

for j:=l to n-l do {цикл сравнения соседних элементов}

if a[j]>a[j+l] then {если предыдущий элемент больше последующего, то}

begin {осуществляем перестановку}

b:=a[j];

a[j]:=a[j+1];

a[j+1]:=b;

k:=k+l; {счетчик перестановок увеличиваем на 1}

end;

i:=i+l; {увеличиваем номер просмотра на 1 }

end;

WriteLn(' Отсортированный массив ');

for i := 1 to n do Write (a[ij:7:2);

WriteLn;

WriteLn(' Количество проходов ', i:3);

End








Дата добавления: 2015-12-01; просмотров: 3863;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.008 сек.