Advertisement
nikitakrut58

exchangeSort

Feb 21st, 2020
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.40 KB | None | 0 0
  1. #include <iostream>
  2. #include <time.h>
  3.  
  4. using namespace std;
  5. int p = 50000;
  6. //сортировка методом простого обмена
  7. void exchange(int* mas, int n)
  8. {
  9.     unsigned long int M = 0, C = 0;
  10.     bool ssign = 1; int pass = 0;
  11.     while (ssign)
  12.     {
  13.         ssign = false;
  14.         pass++;
  15.         for (int a = 0; a < n - pass; a++) {
  16.             C++;
  17.             if (mas[a] > mas[a + 1])
  18.             {
  19.                 swap(mas[a], mas[a + 1]);
  20.                 M++;
  21.                 ssign=true;
  22.             }
  23.         }
  24.     }
  25.     if (n != 10) cout << "C = " << C << " M = " << M << "\n";
  26. }
  27. //обратная сортировка
  28. void invertSort(int* mas, int n)
  29. {
  30.     int max_idx;
  31.     for (int i = 0; i < n - 1; i++)
  32.     {
  33.         max_idx = i;
  34.         for (int j = i + 1; j < n; j++)
  35.         {
  36.             if (mas[j] > mas[max_idx])
  37.             {
  38.                 max_idx = j;
  39.             }
  40.         }
  41.         swap(mas[max_idx], mas[i]);
  42.     }
  43. }
  44. //тестовый прогон программы
  45. void testProg() {
  46.     int* mas = new int[10];
  47.     cout << "Практическая работа №1 Сравнение простых алгоритмов сортировки массивов. Нестягин Никита. ИКБО-14-19\n";
  48.     cout << "Заполните тестовый массив:\n";
  49.     for (int i = 0; i < 10; i++)cin >> mas[i];
  50.     cout << "Введённый массив:\n";
  51.     for (int i = 0; i < 10; i++)cout << mas[i] << " ";
  52.     cout << "\n";
  53.     exchange(mas, 10);
  54.     cout << "Результат сортировки:\n";
  55.     for (int i = 0; i < 10; i++)cout << mas[i] << " ";
  56.     cout << "\n";
  57.     delete[]mas;
  58. }
  59. //Расчет для среднего случая
  60. void average(int* a, int k) {
  61.     cout << "-------------------------\nn =" << p << "\nСредний случай\n";
  62.     exchange(a, k);
  63.     p = p + 10000;
  64. }
  65. //Расчет для наилучшего случая
  66. void best(int* a, int k) {
  67.     cout << "Наилучший случай\n";
  68.     exchange(a, k);
  69. }
  70. //Расчет для наихудшего случая
  71. void bad(int* a, int k) {
  72.     cout << "Наихудший случай\n";
  73.     invertSort(a, k);
  74.     exchange(a, k);
  75. }
  76. //Заполнение массивов с помощью псевдослучайной генерации чисел
  77. void random() {
  78.     for (int i = 50000; i <= 90000; i=i+10000)
  79.     {
  80.         int* mas = new int[i];
  81.         for (int j = 0; j < i; j++) {
  82.             mas[j] = rand();
  83.         }
  84.         average(mas, i);
  85.         best(mas, i);
  86.         bad(mas, i);
  87.         delete[] mas;
  88.     }
  89. }
  90.  
  91. int main()
  92. {
  93.     setlocale(0, "rus");
  94.     srand(time(0));
  95.     testProg();
  96.     random();
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement