Функция для перестроения пирамиды

Функция предназначена для просеивания всех оставшихся элементов после перестановки местами первого и последнего элемента. Функция работает с двумя входными параметрами:

1. a[] – массив цифр, требующий преобразования после перестановки местами граничных элементов.

2. k – переменная указывающая номер элемента с которого начинается выполнение алгоритма.

3. n –переменная указывающая до которого момента выполняется алгоритм.

void downHeap(int a[], long k, long n)

{

// процедура просеивания следующего элемента

// До процедуры: a[k+1]...a[n] - пирамида

// После: a[k]...a[n] - пирамида

int new_elem;

long child;

new_elem = a[k];

while(k <= n/2) // пока у a[k] есть дети

{

child = 2*k;

if( child < n && a[child] < a[child+1] ) // выбираем большего сына

child++;

if( new_elem >= a[child] )

break;

// иначе

a[k] = a[child]; // переносим сына наверх

k = child;

}

a[k] = new_elem;

}

Главная функция программы

Эта функция отвечает за реализацию диалога с пользователем, защиту от неправильного ввода и последовательный вызов функций в зависимости от действий пользователя.

void main( )

{

int ,key;

//выделяем память под массив

int *arr=new int [10];

//вывод информации для пользователя

cout<<” Vvesti massiv. Otsortirovat' massiv pri pomoshi algoritma \n”;

cout<<” Piramidal'noy sortirivku.\n”;

cout<<endl;

//выбираем способ заполнения массива

cout<<" Vibirite sposob vvoda:"<<endl;

cout<<endl;

cout<<"1 S klaviaturi"<<endl;

cout<<"2 Sluhaynie hisla"<<endl;

//проверка на правильность ввода ключа

do{

cin>>key;

if(key==1||key==2) break;

else cout<<" Ne pravil'niy vvod. Povtorite"<<endl;

}while(1);

//подключаем генератор случайных чисел

randomize();

//функция выбора решения по ключу

switch(key){

case 1:

cout<<"Ishodniy massiv: "<<endl;

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

{

//заполняем массив

cin>>arr[i];

//проверка правильности ввода чисел

if(cin.fail( )){

do {

cout<<" Ne pravil'niy vvod. Povtorite"<<endl;

cin.clear();

cin.ignore();

cin>>arr[i];

}while(cin.fail());

}

}

cout<<endl;

break;

case 2:

cout<<"Sluchainiy massiv: "<<endl;

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

{

//заполняем массив

arr[i]=random(20)-10;

//выводим его

cout<<arr[i]<<" ";

}

cout<<endl;

break;

}

heapSort(arr, size);

cout<<endl<<"Utogoviy massiv: "<<endl;

for (int i=0; i < 10; i++) {

cout<<arr[i]<<" ";

}

cout<<endl;

delete arr;

getch();

}

Описание работы программного комплекса

Наши рекомендации