Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ln14 сортування масивів.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
114.69 Кб
Скачать

Тема: сортування масивів

Питання, що розглядаються в лекції:

а) сортування за допомогою вставки;

б) сортування за допомогою прямого вибору;

в) сортування за допомогою обміну.

Сортування масивів

Методи сортування повинні економно використовувати доступну пам'ять. Це означає, що пересування, що приводять елементи в порядок, повинні, якщо можливо, виконуватись на тому ж місці, тобто без використаня додаткових масивів.

Як міру ефективності для алгоритмів сортування візьмемо кількість необхідних порівнянь елементів і кількість присвоювань елементів у процесі виконання алгоритму. Точна оцінка деяких алгоритмів сортування - складна математична задача, тому будуть надані тільки кінцеві результати оцінки.

Кількість порівнянь Kc=C

присвоєнь Kп=R.

Методи сортування "на тому ж місці" можна розбити у відповідності до визначаючих їх принципів на три основні групи :

1. Сортування за допомогою вставки (by Insertion) або за допомогою включення.

2. Сортування за допомогою вибору (by Selection) або за допомогою виділення.

3. Сортування за допомогою обміну (by Exchange) або бульбашкове.

Кожна група має прямий метод (самий простий) і покращені(ускладнені) методи сортування. Прямі методи працюють значно повільніше, ніж покращені і в практичних задачах майже не застосовуються. Але вони мають свої переваги:

1. Вони зручні для пояснення характерних рис, основних принципів методу.

2. Алгоритми цих методів легко зрозуміти і вони невеликі за розміром.

Покращені методи складніші і тому при достатньо малих розмірах масивів і в деяких особливих ситуаціях прямі методи працюють швидше.

Прямі методи сортування.

I.Сортування за допомогою вставки.

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

При цьому треба:

1. Знайти місце, куди потрібно вставити цей елемент.

2. Зсунути елементи,що стоять справа у відсортованій частині, на одну позицію вправо.

3. На звільнене місце поставити елементБ що аналізується(вставляється).

Два способи виконання цих дій:

1) кожний наступний елемент порівнюється з елементами у відсортованій частині, знаходиться місце вставки, всі наступні елементи зсуваються на одну позицію вправо і після цього вставляється елемент;

2) елемент, що вставляється, послідовно, зліва направо, порівнюється з кожним із елементів у відсортованій частині. Якщо потрібно, елемент у відсортованій частині одразу зміщується на одну позицію вправо. Як тільки знайдено потрібне місце вставки, елемент, що аналізується, вставляється на потрібну позицїю.

Загальна схема.

відсортована

частина

2 9 7 3 5 8 ...

I=2

Крок 1

2 9 7 3 5 8 ...

i=3

Крок 2

вставка

i=4

2 9 7 3 5 8 ...

Крок 3

Зсув

вставка i=5

2 7 9 3 5 8 ...

Крок 4

зсув

i т.д. і=2,n

Ідея алгоритму :

а) запам'ятати елемент, що аналізується B:=A[i] (з індексом i);

б) знайти місце вставки, B>A[j]- по зростанню (позиція з індексом j);

в) зсунути елементи у відсортованій частині, починаючи з позиції вставки.

відсортована

частина

j i

а

B

в

б

а) вставка зліва, пошук зліва (реалізація способу (1))

|inserton_1

1 n

A є R

B є R

i,j,k,n є N

введення n,A

(i=2,n)

B:=A[i]

j:=1

(BA[j])U(i>j) - пошук місця вставки

j:=j+1 - починаючи з першого елементу

-1

(k=i-1,j)

A[k+1]:=A[k] - зсув елементів

A[j]:=B -власно вставка

виведення A

|end

б)вставка зліва, пошук справа, без бар'єру (реалізація способу 2)

Елемент,що вставляється, порівнюється з кожним наступним елементом у відсортованій частині, починаючи справа від її межі. При невиконанні умови вставки кожний черговий елемент відразу ж пересувається. Крім того, необхідно забезпечити перевірку на межу(початок) масиву при русі справа наліво, тобто j>1. Метод називається методом вставки "без бар'єру".

В ідсортована частина i=3

5 7 3 ...

3

(5>3)(7>3)

B

|inserton_2

1 n

A є R

B є R

i,j,n є N

введення n,A

(i=2,n)

B:=A[і]

j:=і

(j>1)∩(A[j-1]>B)

A[j]:=A[j-1]

j:=j-1

A[j]:=B

Виведення: A

|end

в) вставка "з бар'єром" (реалізація способу(2))

Елемент, що вставляється, ставиться у 0-ву позицію, тобто перед відсортованою частиною, пошук місця вставки здійснюється зліва направо. Межу масиву відслідковувати не треба, але слід передбачити додатковий(нульовий) елемент масиву.

|inserton_3

0 n

A є R

i,j,n є N

введення n,A

(i=2,n)

A[0]:=A[і]

j:=і

A[0]<A[j-1]

A[j]:=A[j-1]

j:=j-1

A[j]:=A[0]

виведення A

|end

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

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