Advertisement
SteelK

Untitled

May 28th, 2016
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.63 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include<iostream>
  3. #include<windows.h>
  4. #include<ctime>
  5.  
  6. using namespace std;
  7.  
  8. void random(int *mac, size_t n);
  9. void vstav(int *mac, size_t n);
  10. void shell(int *macc, size_t n);
  11. void user_cout_mas(int *mas, size_t size);
  12.  
  13. int main()
  14.  
  15. {
  16.     setlocale(LC_ALL, "rus");
  17.     srand(time(NULL));
  18.  
  19.     cout << "Киселева Анна. Группа 3.1. 7 Задача." << endl;
  20.     cout << "Написать программу, в которой запрашивается размер " << endl ;
  21.     cout << "массива (массив заполняется случайными числами), " << endl;
  22.     cout << "выбор из двух заданных сортировок, есть выбор " << endl;
  23.     cout << "показывать или не показывать массив до и после " << endl;
  24.     cout << "сортировки. (Данные сортировки: Вставками и Шелла)" << endl;
  25.  
  26.     size_t n;
  27.     char x, d;
  28.  
  29.     cout << endl << "Введите количество элементов массива " << endl;
  30.     cin >> n;
  31.     int *mac = new int[n];
  32.     random(mac, n);
  33.  
  34.     user_cout_mas(mac, n);
  35.  
  36.     cout << endl;
  37.     cout << "Введите 0,чтобы выйти." << endl;;
  38.     cout << "Введите 1 для сортировки вставками." << endl;
  39.     cout << "Введите 2 для сортировки Шелла." << endl;;
  40.     cin >> x;
  41.  
  42.     switch (x)
  43.     {
  44.         case'0':return 0;
  45.         case'1':
  46.             vstav(mac, n);
  47.             break;
  48.         case '2':
  49.             shell(mac, n);
  50.         default:
  51.             cout << "Вы в своей жизни сделали неправильный выбор..." << endl;
  52.             break;
  53.     }
  54.     //system("pause");
  55.     return 0;
  56. }
  57.  
  58.  
  59. void random(int *mac, size_t n)
  60. {
  61.     for (int i = 0; i<n; i++)
  62.         mac[i] = rand() % 101 - 50;
  63. }
  64.  
  65.  
  66. void vstav(int *mac, size_t n)
  67. {
  68.     long double start, finish, time_work;
  69.     start = clock();
  70.     int x;
  71.     size_t i, j;
  72.     {
  73.         for (i = 0; i <n; i++)
  74.         { // цикл проходов, i - номер прохода
  75.             x = mac[i];
  76.             // поиск места элемента в готовой последовательности
  77.             for (j = i - 1; j >= 0 && mac[j] > x; j--)
  78.                 mac[j + 1] = mac[j]; // сдвигаем элемент направо, пока не дошли
  79.                                      // место найдено, вставить элемент
  80.             mac[j + 1] = x;
  81.         }
  82.     }
  83.     finish = clock();
  84.  
  85.     user_cout_mas(mac, n);
  86.  
  87.     time_work = 1.0 * (finish - start) / CLOCKS_PER_SEC;
  88.     cout << "Время работы сортировки вставками: " << time_work << "cek" << endl;
  89. }
  90.  
  91.  
  92. void shell(int *mac, size_t n)
  93. {
  94.     long double start, finish, time_work;
  95.     start = clock();
  96.     int d = n / 2;
  97.     while (d > 0)
  98.     {
  99.         for (size_t i = 0; i < n - d; i++)
  100.         {
  101.             int j = i;
  102.             while (j >= 0 && mac[j] > mac[j + d])
  103.             {
  104.                 swap(mac[j], mac[j + d]);
  105.                 j--;
  106.             }
  107.         }
  108.         d /= 2;
  109.     }
  110.     finish = clock();
  111.  
  112.     user_cout_mas(mac, n);
  113.    
  114.     time_work = (finish - start) / CLOCKS_PER_SEC;
  115.     cout << "Время работы сортировки Шелла: " << time_work << "cek" << endl;
  116. }
  117.  
  118. void user_cout_mas(int *mas, size_t size)
  119. {
  120.     size_t d;
  121.     cout << "Введите 0,чтобы выйти." << endl;
  122.     cout << "Введите 1, если хотите вывести полученный массив." << endl;
  123.     cout << "Введите 2,если не хотите выводить полученный массив." << endl;
  124.     cin >> d;
  125.  
  126.     switch (d)
  127.     {
  128.         case 0: break;
  129.         case 1:
  130.             cout << "Ваш полученный массив:  " << endl;
  131.             for (int i = 0; i<size; i++)
  132.                 cout << mas[i] << " ";
  133.             cout << endl;
  134.             break;
  135.         case 2:
  136.             break;
  137.     }
  138. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement