Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <dos.h>
- //#include <ctime>
- //#include <stdio.h>
- #include "Sort.h"
- void gettime(struct time*);
- struct time {
- unsigned char ti_min; /* минуты */
- unsigned char ti_hour; /* часы */
- unsigned char ti_hund; /* сотые доли секунды */
- unsigned char ti_sec; /* секунды */
- };
- //void gettime(struct time* timep);
- int main()
- {
- /*int num;
- std::cout << "Enter the size of array: ";
- std::cin >> num;
- int* arr = new int[num];
- int* arr1 = new int[num];
- int* arr2 = new int[num];
- std::cout << "Enter array: " << std::endl;
- for (int i = 0; i < num; i++)
- {
- std::cin >> arr[i];
- arr1[i] = arr[i];
- arr2[i] = arr[i];
- }
- std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
- vstavka(arr, num);
- for (int i = 0; i < num; i++)
- {
- std::cout << arr[i] << " ";
- }
- std::cout << std::endl;
- std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
- shaker(arr1, 1, num);
- for (int i = 0; i < num; i++)
- {
- std::cout << arr1[i] << " ";
- }
- std::cout << std::endl;
- std::cout << "THIS IS SORT BY SIMPLE DECISION:" << std::endl;
- simple_decision(arr2, num);
- for (int i = 0; i < num; i++)
- {
- std::cout << arr2[i] << " ";
- }
- std::cout << std::endl;
- return 0;*/
- int number;
- std::cout << "Enter number: ";
- std::cin >> number;
- int* mas_vozr = new int[number];
- for (int i = 0; i < number; i++)
- {
- mas_vozr[i] = i;
- }
- int* mas_yb = new int[number];
- for (int i = number-1; i >= 0; i--)
- {
- mas_yb[i] = i;
- }
- int* mas_rand = new int[number];
- for (int i = 0; i<number; i++)
- {
- mas_rand[i] = rand() % 50;
- }
- struct time t1, t2;
- double t_copy, t_sort;
- int* arr = new int[number];
- int* arr1 = new int[number];
- int* arr2 = new int[number];
- //long n;
- char ex = 'n';
- do {
- char sort;
- std::cout << "Enter 'v' for increased array..." << std::endl << "Enter 'y' for decreased array..." << std::endl << "Enter 'r' for random array...";
- std::cin >> sort;
- switch (sort) {
- case 'v'://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- gettime(&t1);
- //int* arr = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr[i] = mas_vozr[i];
- std::cout << arr[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- vstavka(arr, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- gettime(&t1);
- //int* arr1 = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr1[i] = mas_vozr[i];
- std::cout << arr1[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- shaker(arr1, 1, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr1[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- gettime(&t1);
- //int* arr2 = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr2[i] = mas_vozr[i];
- std::cout << arr2[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- simple_decision(arr2, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr2[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- /*delete[] arr;
- delete[] arr1;
- delete[] arr2;*/
- break;
- case 'y': /////////////////////////////////////////////////////////////////////////////////////////////////////
- gettime(&t1);
- //int* arr = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr[i] = mas_yb[i];
- std::cout << arr[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- vstavka(arr, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- gettime(&t1);
- //int* arr1 = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr1[i] = mas_yb[i];
- std::cout << arr1[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- shaker(arr1, 1, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr1[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- gettime(&t1);
- //int* arr2 = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr2[i] = mas_yb[i];
- std::cout << arr2[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- simple_decision(arr2, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr2[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- /*delete[] arr;
- delete[] arr1;
- delete[] arr2;*/
- break;
- case 'r'://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- gettime(&t1);
- //int* arr = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr[i] = mas_rand[i];
- std::cout << arr[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- vstavka(arr, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- gettime(&t1);
- //int* arr1 = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr1[i] = mas_rand[i];
- std::cout << arr1[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- shaker(arr1, 1, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr1[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- gettime(&t1);
- //int* arr2 = new int[number];
- std::cout << "Original array: " << std::endl;
- for (int i = 0; i < number; i++)
- {
- arr2[i] = mas_rand[i];
- std::cout << arr2[i] << " ";
- }
- std::cout << std::endl;
- // Копирование из массива arr1 в массив arr.
- gettime(&t2);
- t_copy = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- gettime(&t1);
- // Цикл сортировки из большого числа проходов.
- simple_decision(arr2, number);
- gettime(&t2);
- t_sort = (t2.ti_hour * 360000. + t2.ti_min * 6000. +
- t2.ti_sec * 100. + t2.ti_hund - (t1.ti_hour * 360000. +
- t1.ti_min * 6000. + t1.ti_sec * 100. + t1.ti_hund)) / 100.;
- t_sort -= t_copy;
- std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
- for (int i = 0; i < number; i++)
- {
- std::cout << arr2[i] << " ";
- }
- std::cout << "Time sort: " << t_sort << std::endl;
- /*delete[] arr;
- delete[] arr1;
- delete[] arr2;*/
- break;
- default:
- std::cout << "Error..." << std::endl;
- break;
- }
- std::cout << "Если вы хотите выйти, нажмите \'u\', в противном случае-любую другую клавишу" << std::endl;
- std::cin.ignore(100, '\n');
- std::cin >> ex;
- } while (ex != 'u');
- return 0;
- }
- sort.h
- #ifndef SORT_H_
- #define SORT_H_
- void vstavka(int* mas, int n);
- void shaker(int* mas, int start, int N);
- void simple_decision(int* mas, int length);
- #endif
- sort.cpp
- #include "Sort.h"
- #include "swap.h"
- #include <iostream>
- void vstavka(int* mas, int n)
- {
- for (int i = 1; i < n; i++)
- {
- for (int j = i; (j > 0) && (mas[j - 1] > mas[j]); j--)
- {
- swap(&mas[j - 1], &mas[j]);
- }
- }
- }
- void shaker(int* mas, int start, int N)
- {
- int l, r, i;
- l = start;
- r = N - 1;
- while (l <= r)
- {
- for (i = r; i >= l; i--)
- {
- if (mas[i - 1] > mas[i])
- {
- swap(&mas[i], &mas[i - 1]);
- }
- }
- l++;
- for (i = l; i <= r; i++)
- {
- if (mas[i - 1] > mas[i])
- {
- swap(&mas[i], &mas[i - 1]);
- }
- }
- r--;
- }
- }
- void simple_decision(int* mas, int length)
- {
- // Перебираем каждый элемент массива (кроме последнего, он уже будет отсортирован к тому времени, когда мы до него доберемся)
- for (int startIndex = 0; startIndex < length - 1; ++startIndex)
- {
- // В переменной smallestIndex хранится индекс наименьшего значения, которое мы нашли в этой итерации.
- // Начинаем с того, что наименьший элемент в этой итерации - это первый элемент (индекс 0)
- int smallestIndex = startIndex;
- // Затем ищем элемент поменьше в остальной части массива
- for (int currentIndex = startIndex + 1; currentIndex < length; ++currentIndex)
- {
- // Если мы нашли элемент, который меньше нашего наименьшего элемента,
- if (mas[currentIndex] < mas[smallestIndex])
- // то запоминаем его
- smallestIndex = currentIndex;
- }
- // smallestIndex теперь наименьший элемент.
- // Меняем местами наше начальное наименьшее число с тем, которое мы обнаружили
- swap(&mas[startIndex], &mas[smallestIndex]);
- }
- }
- swap.h
- #ifndef SWAP_H_
- #define SWAP_H_
- void swap(int* a, int* b);
- #endif
- swap.cpp
- #include "swap.h"
- void swap(int* a, int* b)
- {
- int temp = *a;
- *a = *b;
- *b = temp;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement