пиняючись у разі, коли
. Hайди елемент, менший x або
. Досягнуто початок послідовності.
void Pirmidalina9 (kop, razmer, iter) - функція сортуюча масив пірамідальної сортуванням.
Покроковий опис алгоритму
. Побудова піраміди
Піраміда являє собою дерево, в якому кожен вузол має не більше двох нащадків, причому вузол завжди більше або дорівнює своїм нащадкам (таким чином, на вершині дерева завжди знаходиться найбільший елемент).
Якщо у вихідному масиві n елементів, то останні (n/2) елемента стають основою піраміди (ці елементи є листям дерева, тобто у них немає нащадків, тому для них вищевказане правило виконується автоматично) .
Найзручніше помістити піраміду в масив. При цьому розподіл індексів масиву по вузлах дерева буде виглядати так (на цьому малюнку всі цифри - це індекси елементів масиву, а ні в якому разі не значення цих елементів):
Таким чином, для того, щоб
кожен вузол дерева був більше своїх нащадків, кожен елемент масиву a [i] повинен бути більше або дорівнює елементам a [2 * i + 1] і a [2 * i + 2].
. Сортування
У цій частині алгоритму ми переміщаємо в кінець масиву максимальний елемент, потім виключаємо його з подальшого процесу сортування. Оскільки максимальний елемент завжди знаходиться на вершині піраміди, ми повинні поміняти місцями елементи a [0] і a [n-1] (тобто останній елемент). Причому елемент a [n-1] необхідно додавати так, щоб не порушився порядок піраміди (при цьому піраміду доведеться частково перебудувати). Далі ми будемо розглядати масив тільки до (n-2)-го елемента. p align="justify"> На наступному кроці ми міняємо місцями a [0] і a [n-2] і далі розглядаємо масив тільки до (n-3)-го елемента. Повторюємо всю цю процедуру до тих пір, поки в розглянутої частини масиву не залишиться один елемент. p align="justify"> int Zadaniemassiva (int midx, int midy, int & metod, long int & razmer, int & p) - функція в якій задається розмір масиву, метод заповнення масиву (рандома, за зростанням і за спаданням) . Максимально вводиться число масиву 24500 елементов.Пока НŠ​​буде заданий масив в програмі буде активно тільки 2 кнопки Завдання масиву і Exit .
int F1 (int midx, int midy) {- функція промальовує назва кнопок.
moveto ((midx-7 * 14), midy-30); ("Zadanie parametrov
} F (int midx, int midy, int h, int p) {- функція промальовує кнопки меню.y = midy; (int i = -30; i <= 120; i + = 30) {(p == 0) {//якщо змінна р = 0 то це означає що масив ще не заданий і актівн...