Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка_1_05_ВНУ.doc
Скачиваний:
2
Добавлен:
08.09.2019
Размер:
1.71 Mб
Скачать

Впорядкування одномірних масивів

Задача впорядкування одномірного масиву a(a[1], a[2], … a[n]), в якому значення елементів розміщені довільним чином, полягає в такій їх перестановці, щоб для новосформованого масиву виконувались нерівності:

.

Існує багато методів розв’язування цієї задачі. Показником, за яким оцінюють ефективність того чи іншого методу, є його швидкодія.

Для оцінки швидкодії алгоритмів різних методів впорядкування використовують два критерії - кількість присвоювань та кількість порівнянь.

До класичних методів впорядкування масивів відносяться:

  • впорядкування шляхом вибору;

  • впорядкування обмінами;

  • впорядкування вставками.

Впорядкування шляхом вибору

В масиві a[1], a[2], … a[n] знаходимо найменший елемент і переставляємо його з першим. На другому кроці знаходимо найменший елемент в діапазоні елементів з другого по n-ий і переставляємо його з другим, і так далі для всіх елементів від 1-го до (n-1)-го.

program VporVybir;

uses

Crt;

var

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

min:real;

i,j,nom,n:integer;

begin

ClrScr;

Writeln('Введіть довжину масиву n<=20');

Readln(n);

Writeln;

Writeln('Введіть поелементно масив a:');

For i:=1 to n do Read(a[i]);

Writeln;

{Початок реалізації методу}

For i:=1 to n-1 do

Begin

{пошук поточного мінімального елемента}

min:=a[i];

nom:=i;

for j:=i+1 to n do

if a[j]<min then

begin

min:=a[j];

nom:=j;

end;

{обмін мінімального та i-го елементів}

a[nom]:=a[i];

a[i]:=min;

End;

{Кінець реалізації методу}

{Друк впорядкованого масиву}

Writeln('Впорядкований масив');

For i:=1 to n do Write(a[i]:8:2);

Writeln;

ReadKey;

end.

Впорядкування обмінами

Послідовно переглядаючи масив a[1], a[2], … a[n] знаходимо найменше значення індексу і таке, що для нього виконується нерівність a[i]>a[i+1]. Помінявши місцями елементи a[i] та a[i+1], продовжуємо перегляд з a[i+1] елементу. В результаті найбільший елемент перемістився в правий кінець масиву. Другий крок виконується аналогічно для елементів з 1-го по (n-1)-й. Всього потрібно зробити n-1 крок.

program VporObmn;

uses

Crt;

var

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

b:real;

i,k,n:integer;

begin

ClrScr;

Writeln('Введіть довжину масиву n<=20');

Readln(n);

Writeln('Введіть поелементно масив a:');

For i:=1 to n do Read(a[i]);

Writeln;

{Початок реалізації методу}

For k:=n downto 2 do

{Перенос поточного максимального значення на k-ту позицію}

For i:=1 to k-1 do

if a[i]>a[i+1] then

begin

b:=a[i];

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

a[i+1]:=b

end;

{Кінець реалізації методу}

Writeln('Впорядкований масив');

For i:=1 to n do Write(a[i]:8:2);

Writeln;

ReadKey;

end.