• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

  • 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Selectionsort & Heapsort

  • Автор темы boo
  • Дата начала
B

boo

Доброго времени суток!
Уважаемые программисты, убедительная просьба помочь в написание простейшей консольной программки:
нужно чтобы в поле осуществлялся ввод чисел, например 6, а при нажатии на кнопки осуществлялись сортировки Selection или Heap.

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

Надеюсь на вашу помощь!
 
D

DarkKnight

Доброго времени суток!
Уважаемые программисты, убедительная просьба помочь в написание простейшей консольной программки:
нужно чтобы в поле осуществлялся ввод чисел, например 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++;
}

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 : cout<<endl<<"Сортировка выполнена за "<<SortSelection(Arr, CountEl)<<" итетаций"<<endl; break;
case 2 : cout<<endl<<"Сортировка выполнена за "<<SortHeap(Arr, CountEl)<<" итетаций"<<endl; break;
default: cout<<endl<<" Метод сортировки не выбран ."<<endl;
}

cout<<"Отсортированный массив :"<<endl;
PrintArr(Arr, CountEl);
}
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!