Задачи: Варианты сортировок массива (selection(выборки) и Heap(кучи))

Статус
Закрыто для дальнейших ответов.

DarkKnight

Well-known member
01.08.2010
653
0
#1
Доброго времени суток!
Уважаемые программисты, убедительная просьба помочь в написание простейшей консольной программки:
нужно чтобы в поле осуществлялся ввод чисел, например 6, а при нажатии на кнопки осуществлялись сортировки Selection или Heap.

спасите утопающих!

Надеюсь на вашу помощь!
Если сможешь переложить код с C++, то вот

C++:
#include <iostream>
#include <time.h>
#include <limits>

using namespace std;

//Сортировка метородом выборки
int SortSelection(int* Arr, int CountEl)
{
int Iter = 0;
int* ptr = Arr;
cout<<endl;
while (ptr != (Arr+CountEl))
{
int Max = std::numeric_limits<int>::max();
int* ptr2 = ptr;
int* ptrCurrent = ptr2;
while (ptr2 != (Arr+CountEl))
{
if (Max > *ptr2)
{
Max = *ptr2;
ptrCurrent = ptr2;
}
ptr2++;
Iter++;
}
*ptrCurrent = *ptr;
*ptr = Max;
ptr++;
}

return Iter;
}

//Сортировка методом кучи (Пирамидальным деревом)
int SortHeap(int* Arr, int CountEl) 
{
int dl =0;
int Iter = 0;
while(dl+2 != CountEl)
{
bool isIter = false;
for (int i=0; i<(CountEl-dl)/2;i++)
{
if (Arr[i] < Arr[2*i])
{
int temp = Arr[2*i];
Arr[2*i] = Arr[i];
Arr[i] = temp;
isIter = true;
}
if (Arr[i]< Arr[2*i+1])
{
int temp = Arr[2*i+1];
Arr[2*i+1] = Arr[i];
Arr[i] = temp;
isIter = true;
}
}
if (!isIter) 
{
int temp = Arr[0];
Arr[0] = Arr[CountEl-1-dl];
Arr[CountEl-1-dl] = temp;
dl++;
}
Iter++;
}
return Iter;
}

//Функция вывода массива
void PrintArr(int* Arr, int CountEl)
{
int *ptr = Arr;
while (ptr != (Arr+CountEl))
{
cout<< *ptr << " ";
ptr++;
}
cout<< endl;
}

//Главная функция
void main (void)
{
int *Arr;
int *ptr;
int CountEl = 0;
setlocale(LC_ALL,"Russian");
srand(time(NULL));
cout<<"Введите кол-во элементов в последовательности: ";
cin>>CountEl;

Arr = new int[CountEl];
ptr = Arr;

//Формирование массива
while (ptr != (Arr+CountEl))
{
*ptr = rand()%100 * (rand()%2?1:-1);
ptr++;[color="#FF0000"][/color]
}

cout<<endl<<"Сформированный список элементов : " << endl;
PrintArr(Arr, CountEl);

cout<<endl<<"1. Сортировка выборкой (Selection Sort)"<< 
endl<<"2. Сортировка методом кучи (Heap Sort)"<< endl
<<endl<<"Выбор : ";

int UseSort;
cin>>UseSort;
switch (UseSort)
{
case 1 : cou t<< endl <<"Сортировка выполнена за " << SortSelection(Arr, CountEl)<<" итетаций"<<endl; break;
case 2 : cout << endl <<"Сортировка выполнена за "<< SortHeap(Arr, CountEl)<<" итетаций"<<endl; break;
default: cout << endl <<" Метод сортировки не выбран ."<< endl;
}

cout<< "Отсортированный массив :" << endl;
PrintArr(Arr, CountEl);
}
Перенес в C++ Тему для истории, вдруг кто из пользователей будет искать.
 
Статус
Закрыто для дальнейших ответов.