Advertisement
VictoriaLodochkina

БЕСИТ2!

Sep 20th, 2020
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.77 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3. #include <stdio.h>
  4. #include "sort.h"
  5. int main()
  6.  {
  7.     setlocale(LC_ALL, "Russian");
  8.     clock_t start, end;
  9.     int number;
  10.     std::cout << "Enter number: ";
  11.     std::cin >> number;
  12.     int* mas_vozr = new int[number];
  13.     for (int i = 0; i < number; i++)
  14.     {
  15.         mas_vozr[i] = i;
  16.     }
  17.     int* mas_yb = new int[number];
  18.     for (int i = 0; i<number; i++)
  19.     {
  20.         mas_yb[i] = number-i-1;
  21.     }
  22.     int* mas_rand = new int[number];
  23.     for (int i = 0; i < number; i++)
  24.     {
  25.         mas_rand[i] = rand() % 50;
  26.     }
  27.     int* arr = new int[number];
  28.     int* arr1 = new int[number];
  29.     int* arr2 = new int[number];
  30.     char ex = 'n';
  31.     do {
  32.         char sort;
  33.         std::cout << "Enter 'v' for increased array..." << std::endl << "Enter 'y' for decreased array..." << std::endl << "Enter 'r' for random array...";
  34.         std::cin >> sort;
  35.         switch (sort) {
  36.         case 'v'://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  37.             std::cout << "Original array: " << std::endl;
  38.             for (int i = 0; i < number; i++)
  39.             {
  40.                 arr[i] = mas_vozr[i];
  41.                 std::cout << arr[i] << " ";
  42.             }
  43.             std::cout << std::endl;
  44.             // Копирование из массива arr1 в массив arr.
  45.             // Цикл сортировки из большого числа проходов.
  46.             start = clock();
  47.             vstavka(arr, number);
  48.             end = clock();
  49.             std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
  50.             for (int i = 0; i < number; i++)
  51.             {
  52.                 std::cout << arr[i] << " ";
  53.             }
  54.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  55.             std::cout << "Original array: " << std::endl;
  56.             for (int i = 0; i < number; i++)
  57.             {
  58.                 arr1[i] = mas_vozr[i];
  59.                 std::cout << arr1[i] << " ";
  60.             }
  61.             std::cout << std::endl;
  62.             // Копирование из массива arr1 в массив arr.
  63.             // Цикл сортировки из большого числа проходов.
  64.             start = clock();
  65.             shaker(arr1, 1, number);
  66.             end = clock();
  67.             std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
  68.             for (int i = 0; i < number; i++)
  69.             {
  70.                 std::cout << arr1[i] << " ";
  71.             }
  72.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  73.             std::cout << "Original array: " << std::endl;
  74.             for (int i = 0; i < number; i++)
  75.             {
  76.                 arr2[i] = mas_vozr[i];
  77.                 std::cout << arr2[i] << " ";
  78.             }
  79.             std::cout << std::endl;
  80.             // Копирование из массива arr1 в массив arr.
  81.             // Цикл сортировки из большого числа проходов.
  82.             start = clock();
  83.             simple_decision(arr2, number);
  84.             end = clock();
  85.             std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
  86.             for (int i = 0; i < number; i++)
  87.             {
  88.                 std::cout << arr2[i] << " ";
  89.             }
  90.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  91.             break;
  92.  
  93.         case 'y':                                  /////////////////////////////////////////////////////////////////////////////////////////////////////
  94.  
  95.             std::cout << "Original array: " << std::endl;
  96.             for (int i = 0; i < number; i++)
  97.             {
  98.                 arr[i] = mas_yb[i];
  99.                 std::cout << arr[i] << " ";
  100.             }
  101.             std::cout << std::endl;
  102.             // Копирование из массива arr1 в массив arr.
  103.            
  104.             // Цикл сортировки из большого числа проходов.
  105.             start = clock();
  106.             vstavka(arr, number);
  107.             end = clock();
  108.            
  109.             std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
  110.             for (int i = 0; i < number; i++)
  111.             {
  112.                 std::cout << arr[i] << " ";
  113.             }
  114.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  115.        
  116.             std::cout << "Original array: " << std::endl;
  117.             for (int i = 0; i < number; i++)
  118.             {
  119.                 arr1[i] = mas_yb[i];
  120.                 std::cout << arr1[i] << " ";
  121.             }
  122.             std::cout << std::endl;
  123.             // Копирование из массива arr1 в массив arr.
  124.             // Цикл сортировки из большого числа проходов.
  125.             start = clock();
  126.             shaker(arr1, 1, number);
  127.             end = clock();
  128.  
  129.             std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
  130.             for (int i = 0; i < number; i++)
  131.             {
  132.                 std::cout << arr1[i] << " ";
  133.             }
  134.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  135.             std::cout << "Original array: " << std::endl;
  136.             for (int i = 0; i < number; i++)
  137.             {
  138.                 arr2[i] = mas_yb[i];
  139.                 std::cout << arr2[i] << " ";
  140.             }
  141.             std::cout << std::endl;
  142.             // Копирование из массива arr1 в массив arr.
  143.  
  144.             // Цикл сортировки из большого числа проходов.
  145.             start = clock();
  146.             simple_decision(arr2, number);
  147.             end = clock();
  148.            
  149.             std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
  150.             for (int i = 0; i < number; i++)
  151.             {
  152.                 std::cout << arr2[i] << " ";
  153.             }
  154.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  155.             break;
  156.         case 'r'://////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  157.             std::cout << "Original array: " << std::endl;
  158.             for (int i = 0; i < number; i++)
  159.             {
  160.                 arr[i] = mas_rand[i];
  161.                 std::cout << arr[i] << " ";
  162.             }
  163.             std::cout << std::endl;
  164.             // Копирование из массива arr1 в массив arr.
  165.          
  166.             // Цикл сортировки из большого числа проходов.
  167.             start = clock();
  168.             vstavka(arr, number);
  169.             end = clock();
  170.            
  171.             std::cout << "THIS IS SORT BY INSERTS:" << std::endl;
  172.             for (int i = 0; i < number; i++)
  173.             {
  174.                 std::cout << arr[i] << " ";
  175.             }
  176.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  177.             std::cout << "Original array: " << std::endl;
  178.             for (int i = 0; i < number; i++)
  179.             {
  180.                 arr1[i] = mas_rand[i];
  181.                 std::cout << arr1[i] << " ";
  182.             }
  183.             std::cout << std::endl;
  184.             // Копирование из массива arr1 в массив arr.
  185.            
  186.             // Цикл сортировки из большого числа проходов.
  187.             start = clock();
  188.             shaker(arr1, 1, number);
  189.             end = clock();
  190.            
  191.             std::cout << "THIS IS SORT BY SHAKER:" << std::endl;
  192.             for (int i = 0; i < number; i++)
  193.             {
  194.                 std::cout << arr1[i] << " ";
  195.             }
  196.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  197.             std::cout << "Original array: " << std::endl;
  198.             for (int i = 0; i < number; i++)
  199.             {
  200.                 arr2[i] = mas_rand[i];
  201.                 std::cout << arr2[i] << " ";
  202.             }
  203.             std::cout << std::endl;
  204.             // Копирование из массива arr1 в массив arr.
  205.  
  206.             // Цикл сортировки из большого числа проходов.
  207.             start = clock();
  208.             simple_decision(arr2, number);
  209.             end = clock();
  210.          
  211.             std::cout << "THIS IS SORT BY SIMPLE_SORT:" << std::endl;
  212.             for (int i = 0; i < number; i++)
  213.             {
  214.                 std::cout << arr2[i] << " ";
  215.             }
  216.             std::cout << "Time = " << ((double)end - start) / CLOCKS_PER_SEC << std::endl;
  217.             break;
  218.         default:
  219.             std::cout << "Error..." << std::endl;
  220.             break;
  221.         }
  222.         std::cout << "Если вы хотите выйти, нажмите \'u\', в противном случае-любую другую клавишу" << std::endl;
  223.         std::cin.ignore(100, '\n');
  224.         std::cin >> ex;
  225.     } while (ex != 'u');
  226.     return 0;
  227. }
  228.  
  229. swap.h
  230. #ifndef SWAP_H_
  231. #define SWAP_H_
  232. void swap(int* a, int* b);
  233. #endif
  234.  
  235. swap.cpp
  236. #include "swap.h"
  237. void swap(int* a, int* b)
  238. {
  239.     int temp = *a;
  240.     *a = *b;
  241.     *b = temp;
  242. }
  243.  
  244. sort.h
  245. #ifndef SORT_H_
  246. #define SORT_H_
  247. void vstavka(int* mas, int n);
  248. void shaker(int* mas, int start, int N);
  249. void simple_decision(int* mas, int length);
  250. #endif
  251.  
  252. sort.cpp
  253. #include "sort.h"
  254. #include "swap.h"
  255. #include <iostream>
  256. void vstavka(int* mas, int n)
  257. {
  258.     for (int i = 1; i < n; i++)
  259.     {
  260.         for (int j = i; (j > 0) && (mas[j - 1] > mas[j]); j--)
  261.         {
  262.             swap(&mas[j - 1], &mas[j]);
  263.         }
  264.     }
  265. }
  266. void shaker(int* mas, int start, int N)
  267. {
  268.     int l, r, i;
  269.     l = start;
  270.     r = N - 1;
  271.     while (l <= r)
  272.     {
  273.         for (i = r; i >= l; i--)
  274.         {
  275.             if (mas[i - 1] > mas[i])
  276.             {
  277.                 swap(&mas[i], &mas[i - 1]);
  278.             }
  279.         }
  280.         l++;
  281.         for (i = l; i <= r; i++)
  282.         {
  283.             if (mas[i - 1] > mas[i])
  284.             {
  285.                 swap(&mas[i], &mas[i - 1]);
  286.             }
  287.         }
  288.         r--;
  289.     }
  290. }
  291.  
  292. void simple_decision(int* mas, int length)
  293. {
  294.     // Перебираем каждый элемент массива (кроме последнего, он уже будет отсортирован к тому времени, когда мы до него доберемся)
  295.     for (int startIndex = 0; startIndex < length - 1; ++startIndex)
  296.     {
  297.         // В переменной smallestIndex хранится индекс наименьшего значения, которое мы нашли в этой итерации.
  298.         // Начинаем с того, что наименьший элемент в этой итерации - это первый элемент (индекс 0)
  299.         int smallestIndex = startIndex;
  300.  
  301.         // Затем ищем элемент поменьше в остальной части массива
  302.         for (int currentIndex = startIndex + 1; currentIndex < length; ++currentIndex)
  303.         {
  304.             // Если мы нашли элемент, который меньше нашего наименьшего элемента,
  305.             if (mas[currentIndex] < mas[smallestIndex])
  306.                 // то запоминаем его
  307.                 smallestIndex = currentIndex;
  308.         }
  309.  
  310.         // smallestIndex теперь наименьший элемент.
  311.                 // Меняем местами наше начальное наименьшее число с тем, которое мы обнаружили
  312.         swap(&mas[startIndex], &mas[smallestIndex]);
  313.     }
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement