Advertisement
SteelK

Untitled

May 28th, 2016
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 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;
  28.  
  29.     cout << endl << "Введите количество элементов массива " << endl;
  30.     cin >> n;
  31.     int *mac = new int[n];
  32.     random(mac, n);
  33.  
  34.     cout << endl;
  35.     cout << "Введите 0, чтобы выйти." << endl;;
  36.     cout << "Введите 1, для сортировки вставками." << endl;
  37.     cout << "Введите 2, для сортировки Шелла." << endl;;
  38.     cin >> x;
  39.  
  40.     switch (x)
  41.     {
  42.         case'0':
  43.             return 0;
  44.         case'1':
  45.             vstav(mac, n);
  46.             break;
  47.         case '2':
  48.             shell(mac, n);
  49.             break;
  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 (size_t 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.    
  71.     for (size_t i = 1; i < n; i++) // цикл проходов, i - номер прохода
  72.         for (size_t j = i; j > 0 && mac[j - 1] > mac[j]; j--) // пока j>0 и элемент j-1 > j
  73.             swap(mac[j - 1], mac[j]);
  74.  
  75.     finish = clock();
  76.  
  77.     user_cout_mas(mac, n);
  78.  
  79.     time_work = 1.0 * (finish - start) / CLOCKS_PER_SEC;
  80.     cout << "Время работы сортировки вставками: " << time_work << "cek" << endl;
  81. }
  82.  
  83.  
  84. void shell(int *mac, size_t n)
  85. {
  86.     long double start, finish, time_work;
  87.     start = clock();
  88.     int d = n / 2;
  89.     while (d > 0)
  90.     {
  91.         for (size_t i = 0; i < n - d; i++)
  92.         {
  93.             int j = i;
  94.             while (j >= 0 && mac[j] > mac[j + d])
  95.             {
  96.                 swap(mac[j], mac[j + d]);
  97.                 j--;
  98.             }
  99.         }
  100.         d /= 2;
  101.     }
  102.     finish = clock();
  103.  
  104.     user_cout_mas(mac, n);
  105.    
  106.     time_work = (finish - start) / CLOCKS_PER_SEC;
  107.     cout << "Время работы сортировки Шелла: " << time_work << "cek" << endl;
  108. }
  109.  
  110.  
  111. void user_cout_mas(int *mas, size_t size)
  112. {
  113.     size_t d;
  114.     cout << "Введите 0, чтобы выйти." << endl;
  115.     cout << "Введите 1, если хотите вывести полученный массив." << endl;
  116.     cout << "Введите 2, если не хотите выводить полученный массив." << endl;
  117.     cin >> d;
  118.  
  119.     switch (d)
  120.     {
  121.         case 0: break;
  122.         case 1:
  123.             cout << "Ваш полученный массив:  " << endl;
  124.             for (size_t i = 0; i<size; i++)
  125.                 cout << mas[i] << " ";
  126.             cout << endl;
  127.             break;
  128.         case 2:
  129.             break;
  130.     }
  131. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement