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

Реалізація атд “Дерево” при дпомозі списків синів

сellspace array [1..maxnodes] of struct

int node

int next

// повертає самого лівого сина вузла n дерева Т

function LEFTMOST_CHILD (node n, TREE T):node

int L;            // курсор на початок списку синів вузла n

L = T.header[n]

if EMPTY(L)       // n є листком

then return 0

else return cellspace[L].node

// повертає батька вузла n дерева T

function PARENT (node n, TREE T):node

node p;

position i;

for p from 1 to maxnodes do

i = T.header[p];

while i ≠ 0) do   // перевірка на наявність синів у вузла p

if cellspace.node == n

then  return p

else  i = cellspace.next;

return 0

Двійкові дерев

Бінарним (двійковим) деревом називається таке дерево в якого кожен вузол або немає синів, або має чи лівого, чи правого, або має обидва.Той факт, що кожен син вузла дерева визначений як лівий або правий суттєво відрізняє бінарне дерево від впорядкованого орієнтованого дерева.Обхід бінарного дерева в прямому, симметричному і зворотньому порядках відповідає таким же обходам для звичайних дерев.

Постановка задачі сортування. Види сортування. Алгоритми сортування

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

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

Бульбашкове сортування, Сортування вставками, Сортування через вибір,Швидке сортування, Пірамідальне сортування,“Кишенькове” сортування

Схема “бульбашкового” сортування

Щоб описати схему роботи даного алгоритму, уявимо собі що структури, які необхідно посортувати лежать в масиві, розташованому вертикально.Структури з малим значенням ключового поля більш легкі і в спливають догори як бульбашки. При першому проході масиву, береться перший об’єкт і значення його ключа порівнюється із ключовими полями усіх іншими об’єктів в масиві. Коли зустрічається об’єкт із більш легким значенням ключа, то об’єкти міняються місцями, і вже цей об’єкт стає еталоном для порівняння.

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

       for (int i=0; i<n; i++)

            for (int j = n-1; j>i; j--)

                  if (A[j].key<A[j-1].key)

                        swap (A[j].key, A[j-1].key);

Схема сортування через вибір

При такому сортуванні, на і-му етапі вибирається об’єкт, з найменшим значенням ключа серед об’єктів A[i]…A[n] і міняється місцем із об’єктом A[i]. В результаті, після виконання цього кроку, всі об’єкти A[1],…A[i] будуть впорядковані. для i від 0 до n-1  вибрати серед A[i],…,A[n] елемент із найменшим ключем і поміняти його місцями із A[i]. Реалізувати такий алгоритм можна наступним чином:

int lowindex, lowkey;

for (int i = 0; i < (n-1); i++) {

lowindex = i;

lowkey = A;

for (int j = i+1; j < n; j++)

if (A[j].key< lowkey) {

lowkey = A[j].key;

lowindex = j; }

swap (A.key, A[lowindex].key);  }

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

При сортуванні вставками на і-тому кроці ми вставляємо і-тий елемент А[i] в потрібну позицію серед елементів A[1], A[2],…, A[i-1], які вже впорядковані. Після цієї вставки перші іелементів будуть впорядкованими.Алгоритм роботи можна описати так:

для i від 1 до n    перемістити A[i] на позицію j≤і таку, що A[i]<A[k] для j≤k≤i    

for (int i = 1; i<n; i++) {

j = i;

while (A[j]<A[j-1]) {

swap (A[j], A[j-1]);

if (--j == 0)

break;}}

Швидке сортування

Для сортування елементів A[1]…A[n], вибирається значення ключа v в якості опорного елементу, відносно якого перевпорядковується всі елементи масиву.Значення опорного елементу необхідно вибрати близьким по значенню до медіани розподілу значень ключів, так щоб опорний елемент розбивав множину значень ключів на дві приблизно рівні частини.Далі елементи масиву переставляються так, щоб для деякого індексу j всі переставлені елементи A[1],…,A[j] мали значення ключів, менше від v, а всі елементи A[j+1],…,A[n] – значення ключів, більше або рівне v.Після цього, процедура швидкого сортування рекурсивно застосовується до множини елементів A[1],…,A[j] та A[j+1],…,A[n] для впорядкування цих множин окремо.

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