Advertisement
backlog

temp.merge.reduc

Apr 20th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.74 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void merge(int arr[], int l, int m, int r)
  4. {  int j,i, k;
  5.     int n1 = m - l + 1;
  6.     int n2 = r - m;
  7.     int L[n1], R[n2];
  8. /* Copy data to temp arrays L[] and R[] */
  9.     for (i = 0; i < n1; i++)
  10.         L[i] = arr[l + i];
  11.     for (j = 0; j < n2; j++)
  12.         R[j] = arr[m + 1+ j];
  13. /* Merge the temp arrays back into arr[l..r]*/
  14.     i = 0; // Initial index of first subarray
  15.     j = 0; // Initial index of second subarray
  16.     k = l; // Initial index of merged subarray
  17.  while (i < n1 && j < n2)
  18.     { if (L[i] <= R[j])
  19.         {       arr[k] = L[i];
  20.             i++;  }
  21.         else
  22.         {      arr[k] = R[j];
  23.             j++;  }
  24.         k++;}
  25. /* Copy the remaining elements of L[], if there  are any */
  26.     while (i < n1)
  27.     {arr[k] = L[i];
  28.         i++;
  29.         k++;}
  30.     /* Copy the remaining elements of R[], if there  are any */
  31.     while (j < n2)
  32.     {   arr[k] = R[j];
  33.         j++;
  34.         k++;  }}
  35. /* l is for left index and r is right index of the
  36. sub-array of arr to be sorted */
  37. void mergeSort(int arr[], int l, int r)
  38. {   if (l < r)
  39.     {
  40.         // Same as (l+r)/2, but avoids overflow for
  41.         // large l and h
  42.         int m = (l+r)/2;
  43.      // Sort first and second halves
  44.         mergeSort(arr, l, m);
  45.         mergeSort(arr, m+1, r);
  46.  
  47.         merge(arr, l, m, r);
  48.     }
  49. }
  50.  
  51. /* Function to print an array */
  52. void printArray(int A[], int size)
  53. {
  54.     int i;
  55.     for (i=0; i < size; i++)
  56.         cout<< A[i]<<"  ";
  57.    
  58. printf("\n");
  59. }
  60. /* Driver program to test above functions */
  61. int main()
  62. {    int arr[] = {12, 11, 13, 5, 6, 7};
  63.     int arr_size = sizeof(arr)/sizeof(arr[0]);
  64.  
  65.     printf("Given array is \n");
  66.     printArray(arr, arr_size);
  67.     mergeSort(arr, 0, arr_size - 1);
  68. printf("\nSorted array is \n");
  69.     printArray(arr, arr_size);
  70.     return 0;
  71. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement