Advertisement
rootUser

Merge sort decending order

Aug 9th, 2016
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.70 KB | None | 0 0
  1. #include<stdio.h>
  2. #include<limits.h>
  3.  
  4. int a[1000];
  5. int b[1000];
  6. int n ;
  7.  
  8. void input();
  9. void output();
  10. void Merge_Sort(int [] , int , int);
  11. void Merge(int[] , int , int , int);
  12. void reverse();
  13.  
  14.  
  15. int main()
  16. {
  17.  
  18.      input();
  19.      Merge_Sort(a,1,n);
  20.      reverse();
  21.      output();
  22.  
  23. }
  24. void reverse()
  25. {
  26.     int i,j,k;
  27.      i=n;
  28.     for(j=1;j<=n;j++)
  29.     {
  30.         b[j]=a[i];
  31.         i--;
  32.     }
  33.     i=1;
  34.     for(j=1;j<=n;j++)
  35.     {
  36.         a[i]=b[j];
  37.         i++;
  38.     }
  39.  
  40.  
  41. }
  42. void input()
  43. {
  44.      printf("How many numbers:");
  45.      scanf("%d",&n);
  46.  
  47.      printf("Insert numbers:\n");
  48.  
  49.      int i;
  50.  
  51.      for(i=1 ; i<=n ; i++)
  52.      {
  53.          scanf("%d",&a[i]);
  54.      }
  55. }
  56.  
  57. void Merge_Sort(int arr[],int mn , int mx)
  58. {
  59.      if(mn < mx)
  60.      {
  61.           int mid = ((mn + mx) / 2);
  62.  
  63.           Merge_Sort(arr , mn , mid);
  64.           Merge_Sort(arr , mid+1 , mx);
  65.           Merge(arr , mn , mid , mx) ;
  66.      }
  67. }
  68.  
  69. void Merge(int arr[] , int mn , int mid , int mx)
  70. {
  71.      int n1=mid - mn + 1 ;
  72.      int n2=mx-mid ;
  73.  
  74.      int L[n1 + 1] , R[n2 + 1];
  75.     int i,j,k;
  76.      for( i=1 ; i<=n1 ; i++)
  77.      {
  78.           L[i] = arr[mn + i -1 ] ;
  79.      }
  80.  
  81.      for( j=1 ; j<=n2 ; j++)
  82.      {
  83.           R[j] = arr[mid + j];
  84.      }
  85.  
  86.      L[n1 + 1] = INT_MAX ;
  87.      R[n2 + 1] = INT_MAX ;
  88.  
  89.         i=1 ; j=1 ;
  90.  
  91.      for( k=mn ; k<=mx ; k++)
  92.      {
  93.           if(L[i]<R[j])
  94.           {
  95.                a[k]=L[i];
  96.                i++;
  97.           }
  98.           else
  99.           {
  100.                a[k]=R[j];
  101.                j++;
  102.           }
  103.      }
  104. }
  105.  
  106.  
  107. void output()
  108. {
  109.      printf("\nSorted array:");
  110. int i;
  111.      for(i=1 ; i<=n ; i++)
  112.      {
  113.           printf("%d ",a[i]);
  114.      }
  115. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement