Advertisement
RaulQX

MergeSort and Binary Search in an Array

Jul 4th, 2020
1,171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.51 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. void merge (int array[], int left, int right, int middle)
  4. {
  5.     int i,j,k;
  6.  
  7.     int n1 = middle - left + 1;
  8.     int n2 = right - middle;
  9.  
  10.     int left_arr[n1], right_arr[n2];
  11.  
  12.     for (i=0; i<n1; i++)
  13.         left_arr[i] = array[i+left];
  14.  
  15.     for (j=0; j<n2; j++)
  16.         right_arr[j] = array[middle + j + 1];
  17.  
  18.     i=j=0;
  19.     k=left;
  20.  
  21.     while (i < n1 && j < n2)
  22.     {
  23.         if (left_arr[i] <= right_arr[j])
  24.             array[k] = left_arr[i++];
  25.         else
  26.             array[k] = right_arr[j++];
  27.         k++;
  28.     }
  29.  
  30.     while (i < n1)
  31.     {
  32.         array[k]=left_arr[i++];
  33.         k++;
  34.     }
  35.    
  36.     while (j < n2)
  37.     {
  38.         array[k]=right_arr[j++];
  39.         k++;
  40.     }
  41.  
  42. }
  43.  
  44. void ms(int arr[], int left, int right)
  45. {
  46.     int middle;
  47.  
  48.     if ( left < right )
  49.     {
  50.         middle = (right+left)/2;
  51.  
  52.         ms(arr, left, middle);
  53.         ms(arr, middle+1, right);
  54.  
  55.         merge(arr, left, right, middle);
  56.  
  57.     }
  58. }
  59.  
  60. int bsrch(int left, int right, int n, int array[])
  61. {
  62.     int mid = (left+right)/2;
  63.  
  64.     if (left<mid)
  65.     {
  66.         if (n == array[mid])
  67.         {
  68.             printf("Found it!\nPos:%d\n", mid);
  69.             return mid;
  70.         }
  71.         else if (n < array[mid])
  72.             bsrch(left, mid, n, array);
  73.         else bsrch(mid, right, n, array);
  74.     }
  75.         else return -1;
  76. }
  77.  
  78.  
  79. int main ()
  80. {
  81.     int array[] = {12, 4, 22, -5, 0, 0, -22, 332, 215, -3, 215};
  82.     int n = sizeof(array)/sizeof(int);
  83.  
  84.     //printf("%d\n", n);
  85.  
  86.     for (int i = 0; i < n; i++)
  87.         printf("%d ", array[i]);
  88.     printf("\n");
  89.  
  90.     ms(array, 0, n);
  91.  
  92.     for (int i = 0; i < n; i++)
  93.         printf("%d ", array[i]);
  94.     printf("\n");
  95.  
  96.     if (bsrch(0,n,215,array)==-1)
  97.         printf("Couldn't find it\n");
  98.  
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement