Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОП Конспект лекций - Паскаль.doc
Скачиваний:
20
Добавлен:
30.11.2018
Размер:
1.46 Mб
Скачать

Тема 15: Пошук і сортування елементів масиву. Класи алгоритмів сортування

Сортування методом вибору найменшого елемента

Пошук мінімального (максимального) елемента в масиві

Задача пошуку полягає у пошуку в масиві елемента (чи декількох елементів) із заданими значеннями. Наприклад, пошук максимального чи мінімального значення елемента.

Алгоритм пошуку розглянемо на прикладі. Нехай заданий масив різних елементів:

x1 , x2 , x3 … xn ;

Необхідно знайти мінімальне значення елементів масиву і номер мінімального елемента.

Пошук будемо проводити шляхом порівняння всіх елементів масиву з еталоном, тобто з деякою змінною, якый привласнимо значення першого елемента масиву. Порівняємо еталон зі значенням другого елемента масиву. Якщо його значення буде менше еталона, то змінимо еталон, привласнивши йому значення другого елемента, і перейдемо до порівняння його з третім елементом; у противному випадку відразу перейдемо до порівняння еталона з третім елементом. За причини того, що всі дії порівняння виконуються однаково для всіх елементів масиву, то основою алгоритму пошуку буде цикл.

Приклад програми:

{Пошук миним. елемента в масиві і його номер}

const n=10;

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

var

x : massiv; i, nom : integer; min : real;

begin

writeln(‘введіть’,n,’елементів масиву:’);

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

min := x[1]; nom :=1;

for i := 2 to n do

begin

if min > x[ i ] then

begin

min := x[ i ]; nom :=i

end

end;

writeln(‘мінімальне значення’,min:2:3);

writeln(‘це’,nom’элемент масиву.’)

end.

Сортування методом вибору найменшого елемента

Задача сортування полягає в перестановці елементів масиву у визначеному порядку, наприклад, у порядку убування чи зростання.

Наприклад.

Вихідний масив

Упорядкований за

зростанням масив

Розглянемо три найбільш прості методи сортування.

Сортування методом вибору найменшого елемента полягає в наступному. Знайдемо в масиві елемент із найменшим значенням і поміняємо його місцями з першим елементом. Потім розглянемо масив, що залишився, без першого елемента, починаючи з 2-го, і повторимо ті ж дії. Так продовжуємо доти, поки не залишиться один, останній елемент. Він буде найбільшим. У результаті одержимо масив упорядкований по зростанню значень елементів. Приклад програми:

const

n=10;

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

var

a : massiv; i, j, k : integer; x : real;

begin

writeln(‘введіть’,n,’елементів масиву:’)ж

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

writeln(‘упорядкований по зростанню масив:’);

for i :=1 to n do

begin

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

for j :=i+1 to n do

if a[ j ] < x then

begin

x :=a[j];

k :=j;

end;

a[ k ] :=a[ i ];

a[ i ] :=x;

write(x:6:2);

end;

end.

Сортування методом обміну (метод “пухирця”)

Полягає в багаторазовому попарному порівнянні елементів масиву, що знаходяться поруч, і перестановці їх у заданому порядку. Наприклад, нехай заданий масив:

Значення елементів масиву необхідно упорядкувати по зростанню.

Розглянемо його від кінця до початку (порядок розгляду не має значення). Порівняємо 4-й і 5-й елементи. Вони розташовані не в порядку зростання, поміняємо їх місцями. Положення елементів буде наступним:

Тепер порівняємо 3-й і4-й елементи. Вони розташовані в порядку зростання і їх залишимо на місці. Порівнюємо 2-й і 3-й елементи і змінюємо їх місцями:

І, нарешті, порівнюємо і змінюємо місцями 1-й і 2-й елемент

21 72 203 34 155

У результаті мінімальний елемент перемістився на перше місце в масиві. Розглянутий процес повторюємо доти, поки елементи масиву не виявляться упорядкованими по зростанню їхніх значень. Перестановка елементів у попарному порівнянні нагадує всплиття пухирця повітря в рідині, відкіля і названий даний метод сортування.

Приклад програми:

const

n=10;

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

var

a : massiv; i, j, x : integer;

begin

writeln('Введіть 10 значень елементів масиву:');

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

writeln(‘упорядкований по зростанню масив:’);

for i := 2 to n do

begin

for j := n downto i do

if a[j-1] > a[j] then

begin

x := a[j-1];

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

a[j] := x;

end;

for := 1 to n do

write(a[i],’’);

end;

end.

Сортування методом уставок

Полягає в наступному. Нехай у заданій послідовності А[1], А[2], ..., А[n] перші елементи уже відсортовані. У цій частині послідовності будемо шукати місце для і-го елемента, порівнюючи його один по одному зі всіма елементами, що знаходяться ліворуч, поки не виявиться, що деякий А[j] елемент<=A[і]. Зрушимо праву частину послідовності A[j+1], A[j+2], ..., A[j-1] на один елемент у право, звільнивши місце A[j=1] для елемента A[і], куди його і поставимо.

У випадку, якщо виявиться, що елемент A[і] менше всіх елементів, що стоять ліворуч, і місце йому не знайдено, перегляд закінчимо по досягненню першого елемента і всю послідовність зрушимо на один елемент вправо, а елемент A[і] поставимо на перше місце.

Проробивши подібні дії від 2-го елемента до n-го, одержимо упорядковану по зростанню значень елементів послідовність.

Приклад програми:

const

n=10;

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

var

a : massiv;

i, j, x : integer;

begin

writeln('введіть вектор з ',n,' цілих чисел:');

for і := 1 to n do

read(a[i]);

writeln(‘упорядкований по зростанню вектор:’);

for i := 2 to n do

begin

x := a[i];

j := i-1;

while (x<a[j]) and (j>0) do

begin

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

j := j-1;

end;

a[j+1] :=x;

for i:= 1 to n do

write(a[i],’’);

end.

Питання для контролю.

1. Задача пошуку елемента в масиві і задача сортування елементів у масиві.

2. Алгоритм пошуку мінімального елемента в масиві і визначення його номера.

3. Алгоритм сортування методом вибору найменшого елемента.

4. Алгоритм сортування методом уставок. Приклад програми.