Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
прочие задания / Прогрна яыву / metodichka_k_laboratornym_i_practicheskim_rabotam.docx
Скачиваний:
101
Добавлен:
22.03.2015
Размер:
423.17 Кб
Скачать

Сортировка выбором

Сортировку выбором называют еще сорти­ровкой поиском последовательных минимумов.

Рассмотрим один из алгоритмов сортировки выбором.

Очевидно, что первое место в массиве должен занять наименьший элемент, второе — наименьший из всех остальных эле­ментов и т. д. Пусть x1,…, xi-1 уже получили нужные значения. Тогда определение индекса k наименьшего элемента из хi, xi+1, ... , xп и перестановка xi с хk приведут к тому, что х1, ..., xi будут иметь нужные значения. Таким образом, схема программы решения поставленной задачи может быть следующей:

program vibor;

описания;

begin

ввести массив х;

for i:=1 to n do

begin

найти индекс k наименьшего элемента среди хi, xi+1 ,.., xn;

переставить xi с хk ;

writeln(xi)

end

end.

Как только элемент занял свое место, он сразу же выводится.

Приступим к детализации схемы. Ввод массива не доставляет затруднений:

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

и можно перейти к поиску индекса k наименьшего элемента среди x[i], ..., х[п]:

k:= i;

for j:= i+1 to n do

if x[j] < x[k] then k:= j

Для перестановки x[i] с x[k] привлекаем дополнительную переменную v: v:=x[i]; x[i]:= x[k]; x[k]:=v.

Теперь можно написать программу (считаем элементы массива действительными числами):

program vibor;

const n=20;

type vect=array[1. .n] of real;

var x : vect; v : real;

i, j, k : integer;

begin

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

for i:=1 to n do

begin

k:= i;

for j:= i+1 to n do

if x[j] < x[k] then k:= j;

v:=x[i]; x[i]:= x[k]; x[k]:=v

writeln(x[i])

end

end.

При решении практических задач упорядочивание x1, ..., xn, как правило, сопровождается некоторыми дополнительными дей­ствиями. Например, если x1, y1, x2, y2,..., xп, yпэто значения аргумента х и некоторой функции y=f(x), то перестановка x1,..., хn должна сопровождаться перестановкой y1, ..., yп. Эле­менты y1, ..., yn переставляются так же, как x1, ...,xп вне зави­симости от значений самих y1 ,.., yп. Рассмотрим эту задачу, переставленные значения x1, y1, ..., xп, yп будут выведены в два столбца:

X1 y1

X2 y2

. . . . . . .

Xп yп

Программа:

program tabl;

const n =20;

type vect=array[1. .n] of real;

var x, y : vect;

v : real;

i, j, k : integer;

begin

for i:=1 to n do read(x[i], y[i]);

for i:=1 to n do

begin

k:= i;

for j:=i+1 to n do

if x[j] < x[k] then k:= j;

v:=x[i]; x[i]:= x[k]; x[k]:=v;

v:=y[i]; y[i]:=y[k]; y[k]:=v;

writeln(x [i], y[i])

end

end.

Ниже приведен пример программы, в которой определяется максимальный из оставшихся элементов. Программа, реализующая этот алгоритм для сортировки по убыванию, выглядит следующим образом:

program sort1;

{Программа сортирует значения одномерного массива в порядке убывания методом выбора максимума)

const

n = 20;

var

а : array[ 1..n] of integer;

i, j, max, i_max : integer;

begin

{ввод значений элементов массива}

for i:=1 to n do

read(a[i]);

{сортировка}

for i:=1 to n-1 do

begin

max:=a[i]; {поиск максимального значения элемента}

i_max:=i; {среди значений элементов от}

for j:=i+1 to n do {i-гo до n-гo}

if a[j] > max then

begin

max:=a[j];

i_max:=j;

end;

a[i_max]:=a[i]; {обмен i-ro и максимального элементов}

a[i]:=max;

end;

{вывод отсортированного массива}

for i:=1 to n do

write(a[i]:7);

end.