Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
массивы в паскале.DOC
Скачиваний:
1
Добавлен:
22.11.2019
Размер:
117.76 Кб
Скачать

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

Алгоритм сортировки массива по возрастанию методом прямого выбора может быть представлен так:

1. Просматривая массив от первого элемента, найти минимальный и поместить его на место первого элемента, а первый на место минимального.

2. Просматривая массив от второго элемента, найти минимальный и поместить его на место второго элемента, а второй на место минимального.

3. И так далее до предпоследнего элемента.

Ниже представлена программа сортировки массива целых чисел по возрастанию. Для демонстрации процесса сортировки программа выводит массив после каждого обмена элементов.

const

size = 5;

var

a : array [1..size] of integer;

i : integer; { номер элемента, от которого ведется поиск }

{ минимального элемента }

min : integer; { номер минимального элемента в части }

{ массива от i до верхней границы массива }

j : integer; { номер элемента, сравниваемого с минимальным }

buf : integer; { буфер, используемый при обмене эл-тов массива}

k: integer;

begin

writeln ( ‘ Сортировка массива.’ );

write ( ‘ Введите ’,size : 3, ‘ целых в одной строке ’ );

writeln ( ‘ через пробел и нажмите < ENTER >’);

for k :=1 to size do read (a [k] );

writeln (‘ Сортировка ’);

for i :=1 to size — 1 do

begin

{ поиск минимального элемента в части массива от a [i ] до a [ size ] }

min := i ;

for j :=i + 1 to size do begin

if a [j] < [min] then min := j;

{ поменяем местами a [min] и a[i] }

buf := a [i];

a [i] := a [min];

a [min] :=buf ;

{ введем массив }

for k := 1 to size do write ( a [k] , ‘ ’ ) ;

writeln;

end;

end;

writeln (‘ Массив отсортирован.’ ) ;

end.

Пример работы программы:

Сортировка массива.

Введите 5 целых в одной строке через пробел и нажмите < ENTER >

12 -3 56 47 10

Сортировка

-3 12 56 47 10

-3 10 56 47 12

-3 10 12 47 56

-3 10 12 47 56

Массив отсортирован.

Сортировка методом прямого обмена.

В основе алгоритма лежит обмен соседних элементов массива. Каждый элемент массива, начиная с первого, сравнивается со следующим и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением — к концу массива (тонут), поэтому этот метод иногда называют “пузырьковым”. Этот процесс повторяется на единицу меньше раз, чем элементов в массиве.

На рис.1 показан пример процесса сортировки массива. Буквой (“а”) обозначено исходное состояние массива и перестановки на первом проходе, буквой (“б”) — состояние после перестановок на первом проходе и перестановки на втором проходе и так далее.

i=1

3

2

2

2

1

i=2

2

3

3

1

2

i=3

4

4

1

3

3

i=4

5

1

4

4

4

i=5

1

5

5

5

5

а

б

в

г

д

Рис. 1. Процесс сортировки массива.

Ниже представлена программа сортировки массива целых чисел по возрастанию. Для демонстрации процесса сортировки программа выводит массив после каждого цикла обменов.

const

SIZE=5;

var

a: array [1..size] of integer;

i: integer; { счетчик циклов }

k: integer; { текущий индекс элемента массива }

buf: integer;

begin

writeln (‘ Сортировка массива пузырьковым методом.’);

writeln (‘ Введите’,size:3,’ целых в одной строке через пробел ’);

writeln (‘ и нажмите <Enter> ’);

for k:=1 to size do read(a[k]);

writeln (‘ Сортировка.’);

for i:=1 to size-1

do begin

for k:=1 to size-1

do begin

if a[k]>a[k+1]

then begin

{ обменяем к-й и (к+1)-й элементы }

buf:=a[k];

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

a[k+1]:=buf;

end;

end;

for k:=1 to size do writeln(a[k], ‘ ’);

writeln;

end;

writeln(‘ Массив отсортирован.’);

end;