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

Лекція №7 Впоряднування одновимірних масивів. Метод ‘’бульбашки’’, вибору, включення, швидке сортування

Впорядкування, або сортування масиву - це процес, в результаті якого всі (або частина елементів) будуть впорядковані по зростанню величин елементів або по спаданню їх значень. Впорядкований масив значно легше обробляти, вести в ньому пошук елементів. Всі великі масиви даних, які складають бази даних, обов’язково впорядковують.

Взагалі існує дуже багато алгоритмів впорядкування масивів. Їх можна поділити на декілька основних типів: сортування обміном, швидке та сортування пірамідою. Різниця між ними складається в кількості порівнянь, які необхідно виконати для розв’язку задачі. Для оцінки ефективності алгоритму будемо використовувати дві величини: кількість порівнянь значень елементів(К) та кількість переміщень елементів (S). Останнє значення викликає найбільший інтерес – переміщення даних в пам’яті є більш повільним процесом, ніж порівняння.

Розглянемо декілька алгоритмів одного методу впорядкування - методу обміну. Цей метод дуже легко реалізується, простий для розуміння. Метод обміну полягає в послідовному порівнянні двох вибраних елементів. Якщо порядок слідування елементів порушено, то виконується обмін цих елементів. Зверніть увагу на дію обміну двох елементів - a[i] a[k]. Для цього використовуємо проміжну клітинку пам’яті х.

begin

x:=a[i];

a[i]:=a[k];

a[k]:=x

end;

4.5.1. Метод бульбашки.

Ідея методу бульбашки дуже проста. Попарно порівнюючи елементи, «витискуємо» з масиву найбільш важкий елемент (найбільший) на саме крайнє праве місце, далі наступний елемент і т.д., поки всі елементи не займають свої місця.

var a: array [1..100] of real;

i,j,k,n:integer;

x: real;

begin

writeln('вв.n');

readln(n);

for i:=1 to n do

read (a[i]);

writeln;

for j:=1 to n do {зовнішній цикл, який змушує n раз переглянути масив}

for i:=1 to n-1 do

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

begin

x:=a[i];

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

a[i+1]:=x;

end;

for i:=1 to n do

write(a[i]:5:3);

writeln;

end.

Цей метод має найбільшу кількість порівнянь значень елементів масивів, тому дуже повільний. Для його реалізації треба виконати n2 порівнянь. Якщо n = 100, то це вже 10000 порівнянь. Але частіше обробляються масиви з кількістю елементів n >1000. Інша модифікація методу трохи зменшує кількість порівнянь. В ньому порівнюється кожний елемент з наступними. При цьому кожний наступний крок потребує на одне порівняння менше.

var a: array [1..100] of real;

i,j,k,n:integer;

x: real;

begin

writeln('вв.n');

readln(n);

for i:=1 to n do

read(a[i]);

writeln;

for i:=1 to n-1 do

for k:=i to n do

if a[i]>a[k] then

begin

x:=a[i];

a[i]:=a[k];

a[k]:=x;

end;

for i:=1 to n do

write(a[i]:5:3);

readln;

end.

Виконаємо трасування цієї програми для n=5

значення i

значення a[i]

значення k

значення a[k]

значення масиву

1

9

2

7

9,7, 4, 2, 6 (проводимо обмін a[i] таa[k])

1

7

3

4

7, 9,4, 2, 6 (проводимо обмін a[i] таa[k])

1

4

4

2

4, 9, 7, 2, 6 (проводимо обмін a[i] таa[k])

1

2

5

6

2, 9, 7, 4,6(не проводимо обмін a[i] таa[k])

2

9

3

7

2, 9,7, 4, 6 (проводимо обмін a[i] таa[k])

2

7

4

4

2, 7, 9,4, 6 (проводимо обмін a[i] таa[k])

2

4

5

6

2, 4, 9, 7,6(не проводимо обмін a[i] таa[k])

3

9

4

7

2, 4, 9,7, 6 (проводимо обмін a[i] таa[k])

3

7

5

6

2, 4, 7, 9,6(проводимо обмін a[i] таa[k])

4

9

5

7

2, 4, 6, 9,7(проводимо обмін a[i] таa[k])

2, 4, 6, 7, 9

Якщо в першому варіанті сортування дляn=5треба було виконати 5*4=20 порівнянь, то в другому варіанті треба виконати 10 порівнянь.

Соседние файлы в папке конспект лекцій 1 паск