DacCum

Сравнения QuickSort & MergeSort

Dec 14th, 2021
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.89 KB | None | 0 0
  1. #include <iostream>
  2. #include <ctime>
  3.  
  4. using namespace std;
  5.  
  6. unsigned long long asignmentOperations, compareOperations;
  7.  
  8. //функция сортировки
  9. void quickSort(int* mas, int first, int last) {
  10.     int mid, count;
  11.     int f = first, l = last;
  12.     mid = mas[(f + l) / 2]; //вычисление опорного элемента
  13.     do {
  14.         while (mas[f] < mid) f++;
  15.         while (mas[l] > mid) l--;
  16.         if (f <= l) {
  17.             count = mas[f];
  18.             mas[f] = mas[l];
  19.             mas[l] = count;
  20.             f++;
  21.             l--;
  22.         }
  23.     } while (f < l);
  24.     if (first < l) quickSort(mas, first, l);
  25.     if (f < last) quickSort(mas, f, last);
  26. }
  27.  
  28. void merge(int arr[], int first, int m, int last) {
  29.     int i, j, k;
  30.     int n1 = m - first + 1;
  31.     int n2 = last - m;
  32.  
  33.     int *lArr = new int[n1], *rArr = new int[n2]; //временные массивы
  34.  
  35.     // копировать данные во временные массивы
  36.     for (i = 0; i < n1; i++) lArr[i] = arr[first + i];
  37.     for (i = 0; i < n2; i++) rArr[i] = arr[m + 1 + i];
  38.  
  39.     i = j = 0; /* начальный индекс первого подмассива и начальный индекс второго подмассива*/
  40.     k = first;  /* начальный индекс объединенного подмассива */
  41.  
  42.     while (i < n1 && j < n2) {
  43.         if (lArr[i] <= rArr[j]) arr[k] = lArr[i++];
  44.         else arr[k] = rArr[j++];
  45.         k++;
  46.     }
  47.     while (i < n1) arr[k++] = lArr[i++];
  48.     while (j < n2) arr[k++] = rArr[j++];
  49. }
  50.  
  51. void mergeSort(int arr[], int first, int last) {
  52.     if (first < last) {
  53.         int m = (first + last) / 2;
  54.         mergeSort(arr, first, m);
  55.         mergeSort(arr, m + 1, last);
  56.         merge(arr, first, m, last);
  57.     }
  58. }
  59.  
  60. int getRandom(int max) {
  61.     return rand() % max + 1;
  62. }
  63.  
  64. void generateRandom(int arr[], int n) {
  65.     for (int i = 0; i < n; i++) arr[i] = getRandom(n);
  66. }
  67.  
  68. void generateGrowth(int arr[], int n) {
  69.     for (int i = 0; i < n; i++) arr[i] = i;
  70. }
  71.  
  72. void generateDescending(int arr[], int n) {
  73.     for (int i = 0; i < n; i++) arr[i] = n - i - 1;
  74. }
  75.  
  76. void printArr(int* arr, int n) {
  77.     for (int i = 0; i < n; i++) cout << arr[i] << ' ';
  78.     cout << endl;
  79. }
  80.  
  81. void copyArr(int* arr, int* copy_arr, int n) {
  82.     for (int i = 0; i < n; i++) copy_arr[i] = arr[i];
  83. }
  84.  
  85. int main() {
  86.     int n;
  87.     srand(time(NULL));
  88.  
  89.     int typeN[] = { 10, 100, 1000, 10000 };
  90.    
  91.     for (int i = 0; i < 4; i++) {
  92.         n = typeN[i];
  93.         unsigned long long time;
  94.         int* arr1 = new int[n];
  95.         int* arr2 = new int[n];
  96.  
  97.         cout << "\n     " << n << "     \n";
  98.         cout << "by random: " << endl;
  99.         generateRandom(arr1, n);
  100.         copyArr(arr1, arr2, n);
  101.         time = clock();
  102.         mergeSort(arr1, 0, n-1);
  103.         time = clock() - time;
  104.         cout << "margeSort time: " << time << endl;
  105.         time = clock();
  106.         quickSort(arr2, 0, n - 1);
  107.         time = clock() - time;
  108.         cout << "quickSort time: " << time << endl;
  109.  
  110.         cout << "by growth order: " << endl;
  111.         generateGrowth(arr1, n);
  112.         copyArr(arr1, arr2, n);
  113.         time = clock();
  114.         mergeSort(arr1, 0, n - 1);
  115.         time = clock() - time;
  116.         cout << "margeSort time: " << time << endl;
  117.         time = clock();
  118.         quickSort(arr2, 0, n - 1);
  119.         time = clock() - time;
  120.         cout << "quickSort time: " << time << endl;
  121.  
  122.         cout << "by descending order: " << endl;
  123.         generateDescending(arr1, n);
  124.         copyArr(arr1, arr2, n);
  125.         time = clock();
  126.         mergeSort(arr1, 0, n - 1);
  127.         time = clock() - time;
  128.         cout << "margeSort time: " << time << endl;
  129.         time = clock();
  130.         quickSort(arr2, 0, n - 1);
  131.         time = clock() - time;
  132.         cout << "quickSort time: " << time << endl;
  133.     }
  134.    
  135.     return 0;
  136. }
Add Comment
Please, Sign In to add comment