Функция для перестроения пирамиды
Функция предназначена для просеивания всех оставшихся элементов после перестановки местами первого и последнего элемента. Функция работает с двумя входными параметрами:
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();
}
Описание работы программного комплекса