Advertisement
backlog

temp.merge

Apr 20th, 2018
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1. /* C program for Merge Sort */
  2. #include<stdlib.h>
  3. #include<stdio.h>
  4.  
  5. // Merges two subarrays of arr[].
  6. // First subarray is arr[l..m]
  7. // Second subarray is arr[m+1..r]
  8. void merge(int arr[], int l, int m, int r)
  9. {   //int arr1[10],arr2[10];
  10.     int j,i, k;
  11.     int n1 = m - l + 1;
  12.     int n2 = r - m;
  13.     int L[n1], R[n2];
  14.  
  15.     /* Copy data to temp arrays L[] and R[] */
  16.     for (i = 0; i < n1; i++)
  17.         L[i] = arr[l + i];
  18.     for (j = 0; j < n2; j++)
  19.         R[j] = arr[m + 1+ j];
  20.  
  21.     /* Merge the temp arrays back into arr[l..r]*/
  22.     i = 0; // Initial index of first subarray
  23.     j = 0; // Initial index of second subarray
  24.     k = l; // Initial index of merged subarray
  25.  while (i < n1 && j < n2)
  26.     {
  27.         if (L[i] <= R[j])
  28.         {
  29.             arr[k] = L[i];
  30.             i++;
  31.         }
  32.         else
  33.         {
  34.             arr[k] = R[j];
  35.             j++;
  36.         }
  37.         k++;
  38.     }
  39.  
  40.     /* Copy the remaining elements of L[], if there
  41.        are any */
  42.     while (i < n1)
  43.     {
  44.         arr[k] = L[i];
  45.         i++;
  46.         k++;
  47.     }
  48.  
  49.     /* Copy the remaining elements of R[], if there
  50.        are any */
  51.     while (j < n2)
  52.     {
  53.         arr[k] = R[j];
  54.         j++;
  55.         k++;
  56.     }
  57.  
  58. }
  59.  
  60. /* l is for left index and r is right index of the
  61. sub-array of arr to be sorted */
  62. void mergeSort(int arr[], int l, int r)
  63. {
  64.     if (l < r)
  65.     {
  66.         // Same as (l+r)/2, but avoids overflow for
  67.         // large l and h
  68.         int m = (l+r)/2;
  69.  
  70.         // Sort first and second halves
  71.         mergeSort(arr, l, m);
  72.         mergeSort(arr, m+1, r);
  73.  
  74.         merge(arr, l, m, r);
  75.     }
  76. }
  77.  
  78. /* UTILITY FUNCTIONS */
  79. /* Function to print an array */
  80. void printArray(int A[], int size)
  81. {
  82.     int i;
  83.     for (i=0; i < size; i++)
  84.         printf("%d ", A[i]);
  85.     printf("\n");
  86. }
  87.  
  88. /* Driver program to test above functions */
  89. int main()
  90. {
  91.     int arr[] = {12, 11, 13, 5, 6, 7};
  92.     int arr_size = sizeof(arr)/sizeof(arr[0]);
  93.  
  94.     printf("Given array is \n");
  95.     printArray(arr, arr_size);
  96.  
  97.     mergeSort(arr, 0, arr_size - 1);
  98.  
  99.     printf("\nSorted array is \n");
  100.     printArray(arr, arr_size);
  101.     return 0;
  102. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement