Advertisement
Mancolo

Сортировка

Oct 15th, 2022
684
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.83 KB | None | 0 0
  1. #include <iostream>
  2. #include <Windows.h>
  3. #include <ctime>
  4. using namespace std;
  5.  
  6. //Быстрая сортировка
  7. int partition(int list[], int start, int pivot)
  8.  
  9. {
  10.     int i = start;
  11.     while (i < pivot)
  12.     {
  13.         if (list[i] > list[pivot] && i == pivot - 1)
  14.         {
  15.             swap(list[i], list[pivot]);
  16.             pivot--;
  17.         }
  18.  
  19.         else if (list[i] > list[pivot])
  20.         {
  21.             swap(list[pivot - 1], list[pivot]);
  22.             swap(list[i], list[pivot]);
  23.             pivot--;
  24.         }
  25.  
  26.         else i++;
  27.     }
  28.     return pivot;
  29. }
  30.  
  31. void quickSort(int list[], int start, int end)
  32. {
  33.     if (start < end)
  34.     {
  35.         int pivot = partition(list, start, end);
  36.  
  37.         quickSort(list, start, pivot - 1);
  38.         quickSort(list, pivot + 1, end);
  39.     }
  40. }
  41.  
  42. int main1()
  43. {
  44.     int list[6] = { 2, 12, 5, 48, 0, 4 };
  45.     cout << "Input array ...\n";
  46.     for (int i = 0; i < 6; i++)
  47.     {
  48.         cout << list[i] << "\t";
  49.     }
  50.  
  51.     quickSort(list, 0, 6);
  52.  
  53.     cout << "\n\nSorted array ... \n";
  54.     for (int i = 0; i < 6; i++)
  55.     {
  56.         cout << list[i] << "\t";
  57.     }
  58.  
  59.     return 0;
  60. }
  61. //СОРТИРОВКА СЛИЯНИЕМ
  62. void merge(int list[], int start, int end, int mid);
  63.  
  64. void mergeSort(int list[], int start, int end)
  65. {
  66.     int mid;
  67.     if (start < end) {
  68.  
  69.         mid = (start + end) / 2;
  70.         mergeSort(list, start, mid);
  71.         mergeSort(list, mid + 1, end);
  72.         merge(list, start, end, mid);
  73.     }
  74. }
  75.  
  76. void merge(int list[], int start, int end, int mid)
  77. {
  78.     int mergedList[8];
  79.     int i, j, k;
  80.     i = start;
  81.     k = start;
  82.     j = mid + 1;
  83.  
  84.     while (i <= mid && j <= end) {
  85.         if (list[i] < list[j]) {
  86.             mergedList[k] = list[i];
  87.             k++;
  88.             i++;
  89.         }
  90.         else {
  91.             mergedList[k] = list[j];
  92.             k++;
  93.             j++;
  94.         }
  95.     }
  96.  
  97.     while (i <= mid) {
  98.         mergedList[k] = list[i];
  99.         k++;
  100.         i++;
  101.     }
  102.  
  103.     while (j <= end) {
  104.         mergedList[k] = list[j];
  105.         k++;
  106.         j++;
  107.     }
  108.  
  109.     for (i = start; i < k; i++) {
  110.         list[i] = mergedList[i];
  111.     }
  112. }
  113.  
  114. int main2()
  115. {
  116.     int list[8] = { 3,19,8,0,48,4,5,12 };
  117.     cout << "Input array ...\n";
  118.     for (int i = 0; i < 8; i++)
  119.     {
  120.         cout << list[i] << "\t";
  121.     }
  122.     mergeSort(list, 0, 7);
  123.     cout << "\n\nSorted array ... \n";
  124.     for (int i = 0; i < 8; i++)
  125.     {
  126.         cout << list[i] << "\t";
  127.     }
  128.     return 0;
  129. }
  130. //ПУЗЫРЬКОВАЯ СОРТИРОВКА
  131. void bubbleSort(int list[], int listLength)
  132. {
  133.     while (listLength--)
  134.     {
  135.         bool swapped = false;
  136.  
  137.         for (int i = 0; i < listLength; i++)
  138.         {
  139.             if (list[i] > list[i + 1])
  140.             {
  141.                 swap(list[i], list[i + 1]);
  142.                 swapped = true;
  143.             }
  144.         }
  145.  
  146.         if (swapped == false)
  147.             break;
  148.     }
  149. }
  150.  
  151. int main3()
  152. {
  153.     int list[5] = { 3,19,8,0,48 };
  154.     cout << "Input array ..." << endl;
  155.     for (int i = 0; i < 5; i++)
  156.         cout << list[i] << '\t';
  157.     cout << endl;
  158.  
  159.     bubbleSort(list, 5);
  160.  
  161.     cout << "Sorted array ..." << endl;
  162.     for (int i = 0; i < 5; i++)
  163.         cout << list[i] << '\t';
  164.     cout << endl;
  165.  
  166.     return 0;
  167. }
  168. //Сортировка выбором
  169. int findSmallestPosition(int list[], int startPosition, int listLength)
  170. {
  171.     int smallestPosition = startPosition;
  172.  
  173.     for (int i = startPosition; i < listLength; i++)
  174.     {
  175.         if (list[i] < list[smallestPosition])
  176.             smallestPosition = i;
  177.     }
  178.     return smallestPosition;
  179. }
  180.  
  181. void selectionSort(int list[], int listLength)
  182. {
  183.     for (int i = 0; i < listLength; i++)
  184.     {
  185.         int smallestPosition = findSmallestPosition(list, i, listLength);
  186.         swap(list[i], list[smallestPosition]);
  187.     }
  188.     return;
  189. }
  190.  
  191. int main4()
  192. {
  193.     int list[5] = { 12, 5, 48, 0, 4 };
  194.  
  195.     cout << "Input array ..." << endl;
  196.     for (int i = 0; i < 5; i++)
  197.         cout << list[i] << '\t';
  198.     cout << endl;
  199.  
  200.     selectionSort(list, 5);
  201.  
  202.     cout << "Sorted array ..." << endl;
  203.     for (int i = 0; i < 5; i++)
  204.         cout << list[i] << '\t';
  205.     cout << endl;
  206.     return 0;
  207. }
  208.  
  209. int main()
  210. {
  211.     srand(time(0));
  212.     cout << "Choose sorting 1 - 4" << endl;
  213.     int n;
  214.     cin >> n;
  215.     switch (n)
  216.             {
  217.     case 1:
  218.         cout << "Quick sorting" << endl;
  219.         main1();
  220.         cout << "\n  runtime = " << clock() / 1000.0 << endl;
  221.         break;
  222.  
  223.     case 2:
  224.         cout << "MERGE SORTING" << endl;
  225.         main2();
  226.         cout << " \n  runtime = " << clock() / 1000.0 << endl;
  227.         break;
  228.     case 3:
  229.         cout << " \n BUBBLE SORTING" << endl;
  230.         main3();
  231.         cout << " \n  runtime =  " << clock() / 1000.0 << endl;
  232.         break;
  233.     case 4:
  234.         cout << "Sorting by choice" << endl;
  235.         cout << " \n runtime =" << clock() / 1000.0 << endl;
  236.         main4();
  237.         break;
  238.         }
  239.     system("pause");
  240.     return 0;
  241. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement