Advertisement
niamul64

merge & quick sort

Jun 12th, 2019
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.49 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. ////////////////////////////////////////////////////// merge start
  5. void merge(int arr[], int l, int m, int r)
  6. {
  7.     int i, j, k;
  8.     int n1 = m - l + 1;
  9.     int n2 =  r - m;
  10.  
  11.     int L[n1], R[n2];
  12.  
  13.     for (i = 0; i < n1; i++)
  14.         L[i] = arr[l + i];
  15.     for (j = 0; j < n2; j++)
  16.         R[j] = arr[m + 1+ j];
  17.  
  18.  
  19.     i = 0;
  20.     j = 0;
  21.     k = l;
  22.     while (i < n1 && j < n2)
  23.     {
  24.         if (L[i] <= R[j])
  25.         {
  26.             arr[k] = L[i];
  27.             i++;
  28.         }
  29.         else
  30.         {
  31.             arr[k] = R[j];
  32.             j++;
  33.         }
  34.         k++;
  35.     }
  36.  
  37.  
  38.     while (i < n1)
  39.     {
  40.         arr[k] = L[i];
  41.         i++;
  42.         k++;
  43.     }
  44.  
  45.  
  46.     while (j < n2)
  47.     {
  48.         arr[k] = R[j];
  49.         j++;
  50.         k++;
  51.     }
  52. }
  53.  
  54.  
  55. void mergeSort(int arr[], int l, int r)
  56. {
  57.     if (l < r)
  58.     {
  59.  
  60.         int m = l+(r-l)/2;
  61.  
  62.  
  63.         mergeSort(arr, l, m);
  64.         mergeSort(arr, m+1, r);
  65.  
  66.         merge(arr, l, m, r);
  67.     }
  68. }
  69.  
  70. ////////////////////////////////////////////////////// merge end
  71.  
  72. ////////////////////////////////////////////////////// quick start
  73. int partition (int arr[], int low, int high)
  74. {
  75.     int pivot = arr[high];
  76.     int i = (low - 1);
  77.  
  78.     for (int j = low; j <= high- 1; j++)
  79.     {
  80.  
  81.         if (arr[j] <= pivot)
  82.         {
  83.             i++;
  84.             swap(arr[i], arr[j]);
  85.         }
  86.     }
  87.     swap(arr[i + 1], arr[high]);
  88.     return (i + 1);
  89. }
  90.  
  91. void quickSort(int arr[], int low, int high)
  92. {
  93.     if (low < high)
  94.     {
  95.  
  96.         int pivott = partition(arr, low, high);
  97.  
  98.  
  99.         quickSort(arr, low, pivott - 1);
  100.         quickSort(arr, pivott + 1, high);
  101.     }
  102. }
  103.  
  104. ////////////////////////////////////////////////////// quick end
  105.  
  106. void printArray(int arr[], int s)
  107. {
  108.     int i;
  109.     for (i=0; i < s; i++)
  110.         printf("%d ", arr[i]);
  111.     printf("\n");
  112. }
  113.  
  114.  
  115.  
  116.  
  117. int main()
  118. {
  119.  
  120.     int n,x;
  121.     cin>>n;
  122.     int arrQ[n],arrMrg[n];
  123. for(int i=0;i<n;i++){
  124.     x=rand();
  125.     arrMrg[i]=x;
  126.     arrQ[i]=x;
  127. }
  128.  
  129. clock_t time_req;
  130.     time_req = clock();
  131.     mergeSort(arrMrg, 0, n - 1);
  132.     time_req = clock() - time_req;
  133.  
  134.     double T=(double)(time_req/CLOCKS_PER_SEC*1000);
  135. printf("time for merge sort: %lf  milliseconds\n",T);
  136.  
  137.  //printArray(arrMrg, n) ;
  138. time_req = clock();
  139.     quickSort(arrQ, 0, n-1);
  140.  
  141. T=(double)(time_req/CLOCKS_PER_SEC*1000);
  142. printf("time for merge sort: %lf  milliseconds\n",T);
  143.    // printArray(arrQ, n) ;
  144.  
  145.     return 0;
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement