[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Сортировка
vilgosДата: Пт, 03 Апр 2015, 02:29 | Сообщение # 1
Старший программист
Группа: Модераторы
Сообщений: 76
Репутация: 0
Статус: Offline
Сделать программу для сравнения эффективности сортировок.
Результаты работы:
1) Название сортировки
2) Время в милисикундах
3) Все сортировки должны сортировать один и тот же массив. Обязательно! Не каждый раз заново генерированый а однажды.
4) Можно добавить интерактива, типа зацикленость как в калькуляторе..
 
vilgosДата: Пн, 06 Апр 2015, 22:03 | Сообщение # 2
Старший программист
Группа: Модераторы
Сообщений: 76
Репутация: 0
Статус: Offline

 
akostenkoДата: Чт, 09 Апр 2015, 22:30 | Сообщение # 3
Выучил типы
Группа: Кодеры
Сообщений: 2
Репутация: 0
Статус: Offline
#include "Header.h";
/*Фунция ввода размера массива пользоватлем, возвращает размер массива*/
int razmer()
{
    int N;
    cout << "Для выхода из программы введите 999" << endl;
    cout << "Введите размер массива: " << endl;
    cin >> N;
    return N;
}
/*Функция выполняющая глупую сортировку, выводит на екран время сортировки в милисикундах*/
void stupid(int* mas, int N)
{
    int counter = 0;
    int start = clock();
    for (int i = 0; i < N - 1; i++){
        if (mas>mas[i + 1]){
            int per = mas;
            mas = mas[i + 1];
            mas[i + 1] = per;
            i = -1;
            counter++;
        }
    }
    int end = clock();
    cout << "Глупая сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}
/*Функция выполняющая пузырьковую сортировку, выводит на екран время сортировки в милисикундах*/
void bubble(int* mas, int N)
{
    int counter = 0;
    int tmp;
    int start = clock();
    for (int i = 0; i < N - 1; i++)
    {
        for (int j = 0; j<N - i - 1; j++)
        {
            if (mas
>mas[j + 1])
            {
                tmp = mas;
                mas = mas[j + 1];
                mas[j + 1] = tmp;
                counter++;
            }
        }
    }
    int end = clock();
    cout << "Пузырьковая сортировка: " << end - start << " ms " << "перестановок: " << counter <<endl;
}
/*Функция выполняющая  шейкерную сортировку, выводит на екран время сортировки в милисикундах*/
void shake(int* mas, int N)
{
    int counter = 0;
    int tmp;
    int start = clock();
    for (int i = 0; i < N - 1; i++)
    {
        for (int j = i; j<N - i - 1; j++)
        {
            if (mas>mas[j + 1])
            {
                tmp = mas;
                mas = mas[j + 1];
                mas[j + 1] = tmp;
                counter++;
            }
        }
        for (int j = N - i - 1; j >= 0; j--)
        {
            if (mas<mas[j - 1])
            {
                tmp = mas;
                mas = mas[j - 1];
                mas[j - 1] = tmp;
                counter++;
            }
        }
    }
    int end = clock();
    cout << "Шейкерная сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}
/*Функция выполняющая  четно-нечетную сортировку, выводит на екран время сортировки в милисикундах*/
void chet_nechet(int* arr, int N)
{
    int count=0;
    int counter = 0;
    int tmp;
    int start = clock();
    while (counter >= 0)
    {
        for (int j = 1; j<N - 1; j = j + 2)
        {
            if (arr>arr[j + 1])
            {
                tmp = arr;
                arr = arr[j + 1];
                arr[j + 1] = tmp;
                counter = 1;
                count++;
            }
        }

        for (int j = 0; j<N - 1; j = j + 2)
        {
            if (arr>arr[j + 1])
            {
                tmp = arr;
                arr = arr[j + 1];
                arr[j + 1] = tmp;
                counter = 1;
                count++;
            }
        }
        counter = counter - 1;
    }
    int end = clock();
    cout << "Чет-нечет сортировка: " << end - start << " ms " << "перестановок: " << count << endl;
}
/*Функция выполняющая сортировку вставками, выводит на екран время сортировки в милисикундах*/
void insert(int* mas, int N)
{
    int counter = 0;
    int i,j,tmp;
    int start = clock();
    for (i = 1; i < N; i++)
    {
        tmp = mas;
        for (j = i - 1; j >= 0 && mas > tmp; j--)
        {
            mas[j + 1] = mas;
            counter++;
        }
        mas[j + 1] = tmp;
        
    }
    int end = clock();
    cout << "Вставками сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}
/*Функция выполняющая сортировку расческа, выводит на екран время сортировки в милисикундах*/
int createGap(int gap)
{
    gap = (gap * 10) / 1.3;

    if (gap == 9 || gap == 10)
        gap = 11;

    if (gap < 1)
        gap = 1;

    return gap;
}//end newGap Function
void combSort(int data[], int size)
{
    int counter = 0;
    int gap = size;
    int start = clock();
    while (true) {
        gap = createGap(gap);
        bool swapped = false;

        for (int i = 0; i < size - gap; i++) {
            int j = i + gap;

            if (data > data){
                swap(data, data);
                swapped = true;
                counter++;
            }//end if

        }//end for

        if (gap == 1 && !swapped)
            break;
    }//end for
    int end = clock();
    cout << "Расческа сортировка: " << end - start << " ms " << "перестановок: " << counter << endl;
}//end combSort Function
/*конец расчески*/

int main()
{
    setlocale(LC_ALL, "rus");
    /*=НАЧАЛО=переменной N присваиваем размер размер введенного пользователем массива*/
    while (true)
    {
        int N = razmer();
        /*=КОНЕЦ=переменной N присваиваем размер размер введенного пользователем массива*/
        /*=НАЧАЛО=генерируем массив размера который ввел пользователь*/
        srand(time(NULL));
        int *mas = new int[N];
        int *mass = new int[N];
        int *masss = new int[N];
        int *massss = new int[N];
        int *masssss = new int[N];
        int *massssss = new int[N];
        /*=НАЧАЛО=Выход из программы*/
        if (N == 999)
        {
            delete[] mas;
            delete[] mass;
            delete[] masss;
            delete[] massss;
            delete[] masssss;
            break;
        }
        /*=КОНЕЦ=выход из программы*/
        /*=НАЧАЛО=генерируем массив+делаем копии*/
        for (int i = 0; i < N; i++)
        {
            mas = rand() % 100;
            mass = mas;
            masss = mas;
            massss = mas;
            masssss = mas;
            massssss = mas
;
        }
        /*=КОНЕЦ=генерируем массив размера который ввел пользователь*/
        bubble(mas, N);//пузырьковая
        shake(mass, N);//шейкерная
        chet_nechet(masss, N);//чет-нечет
        insert(massss, N);//вставками
        combSort(masssss, N);//расческа
        //stupid(massssss, N);//глупая
        delete[] mas;
        delete[] mass;
        delete[] masss;
        delete[] massss;
        delete[] masssss;
    }
    system("pause");
    return 0;
}
 
  • Страница 1 из 1
  • 1
Поиск: