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

Тема в разделе "C/C++/C#", создана пользователем DarkKnight, 11 дек 2010.

Статус темы:
Закрыта.
  1. DarkKnight

    DarkKnight Well-Known Member
    C\C++ Team

    Регистрация:
    1 авг 2010
    Сообщения:
    653
    Симпатии:
    0
    Если сможешь переложить код с 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++ Тему для истории, вдруг кто из пользователей будет искать.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей