Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2 семестр Лабораторна робота 3.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
655.12 Кб
Скачать

Порівняння прямих методів упорядкування

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

  • кількість операцій надання значень;

  • кількість порівнянь.

Теоретичні й практичні дослідження алгоритмів прямих методів упорядкування показали, що і за кількістю порівнянь, і за кількістю операцій надання значень, вони мають квадратичну залежність від довжини масиву n. Винятком є метод вибору, який має число операцій надання значень порядку n*ln(n). Цю властивість методу вибору доцільно використовувати при упорядкуванні даних складних структур, коли на одне порівняння виконується кілька операцій надання значень.

Якщо порівняти розглянуті методи між собою, то в середньому, методи вставлянням і вибору приблизно еквівалентні і в кілька разів (в залежності від довжини масиву) швидші, ніж метод обміну.

Бінарний пошук

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

Принцип бінарного пошуку:

Якщо середній елемент масиву співпадає з шуканим, то пошук завершено. Якщо ж середній елемент менший шуканого, то елементи ліворуч нього менші шуканого. Їх можна не брати до уваги і продовжити пошук у правій частині масиву. Якщо середній елемент більший шуканого, то слід продовжити пошук у лівій частині масиву.

Так продовжують до тих пір, поки або елемент буде знайдено, або довжина зони пошуку стане рівна нулю. В останньому випадку шуканий елемент не буде знайдено.

Застосуємо алгоритм бінарного пошуку для знаходження числа X = 14 у масиві A.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

n=16

1

4

7

11

14

18

20

22

25

29

32

37

41

46

49

53

L=1

R=n=16

i:=(L+R) Div 2=8

A[i] > X

R := i – 1=7

1

2

3

4

5

6

7

1

4

7

11

14

18

20

L=1

R=7

i:=(L+R) Div 2=4

A[i] < X

Програма бінарного пошуку :

const MaxN = 20;

type TElement = Real;

TMas = array[1..MaxN] of TElement;

var A : TMas; N, i, j, L, R : Integer; X :TElement;

begin Write('Введіть кількість елементів масиву – '); ReadLn(N);

for i := 1 to N do

begin Write('A[', i, ']='); ReadLn(A[i]); end;

WriteLn('Елементи масиву :');

for i := 1 to N do Write(A[i], ' '); WriteLn;

L := 1; R := N;

repeat i := (L + R) Div 2;

if A[i] < X then L := i + 1;

if A[i] > X then R := i + 1;

until (A[i] = X) Or (L > R);

if A[i] = X

then WriteLn('Шуканий елемент ', X, ' має номер ', i)

else WriteLn('Шуканий елемент ', X, ' у масиві не знайдено');

end.

L: = i + 1=5

5

6

7

14

18

20

L=5

R=7

i:=(L+R) Div 2=6

A[i] > X

R := i–1=5

5

14

L=R=5

Отже, шуканий елемент масиву має номер 5.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]