Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок из серии Pas ABC.doc
Скачиваний:
10
Добавлен:
17.08.2019
Размер:
694.78 Кб
Скачать

Сортировка массива методом простого выбора

При сортировке массива методом выбора применяется базовый алгоритм поиска максимального (минимального) элемента и его номера.

Алгоритм сортировки массива методом выбора:

  1. Для исходного массива выбрать максимальный элемент.

  2. Поменять его местами с последним элементом (после этого самый большой элемент будет стоять на своем месте).

  3. Повторить п.п. 1-2 с оставшимися n-1 элементами, то есть рассмотреть часть массива, начиная с первого элемента до предпоследнего, найти в нем максимальный элемент и поменять его местамис предпоследним (n-1)- м элементом массива, затем с оставшиеся (n-2)-мя элементами и так далее, пока не останется один элемент, уже стоящий на своем месте.

Для упорядочения массива потребуется (n-1) просмотров массива. В процессе сортировки будет увеличиваться отсортированная часть массива, а неотсортированная, соответственно, уменьшаться.

При сортировке данных выполняется обмен содержимого переменных. Для обмена необходимо создавать временную переменную, в которой будет храниться содержимое одной из переменных. В противном случае ее содержимое окажется утерянным.

Задача 1. Массив из 10 элементов отсортировать по возрастанию методом простого перебора.

Решение

Напишем процедуру. Входным параметром для неё будет массив. Он же будет и выходным параметром. Поэтому описываем его как параметр-переменная (с ключевым словом var).

В процедуре внешний цикл по i - определяет длину рассматриваемой части массива. Она будет изменяться от n до 2.

Внутренний цикл по j используется для поиска максимального элемента и его номера. В качестве начального значения максимума разумно взять значение последнего элемента рассматриваемой части массива.

Программный код процедуры:

Procedure sorting1(var a:myarray);

{Сортировка по возрастанию методом простого выбора}

var i,j:integer;

k,m:integer; {номер и значение максимального элемента}

begin

for i:= n downto 2 do{задаем длину рассматриваемой части массива}

begin

{ищем максимальный элемент и его номер}

k:=i; m:=a[i]; for j:= 1 to i-1 do

if a[j] > m then begin k:=j; m:=a[k] end;

{меняем местами найденный элемент и последний}

if k <> i then

begin a[k]:=a[i]; a[i]:= m; end;

end;

end;

end;

Программный код основной программы:

program primer_1;

const n = 10;

type myarray = array[1..n] of integer;

var a:myarray;

Procedure sorting1(var a:myarray);

{Линейная сортировка (сортировка отбором)}

...

begin {main}

writeln('Введите исходный массив:');

for i:=1 to n do read(a[i]);

sorting1(a);

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

for i:=1 to 10 do write(a[i],' ');

writeln;

end.

Процесс упорядочения элементов в массиве по возрастанию методом отбора:

Номер элемента

1

2

3

4

5

Исходный массив

8

7

5

4

2

Первый просмотр

2

7

5

4

8

Второй просмотр

2

4

5

7

8

Третий просмотр

2

4

5

7

8

Четвертый просмотр

2

4

5

7

8

При упорядочивании массива по убыванию необходимо перемещать минимальный элемент. Для чего в алгоритме нахождения максимального элемента достаточно знак ">" поменять на знак "<".