Advertisement
Zinak

mergesort

Jul 20th, 2019
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.03 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void merg(int a[],int l,int mid, int h)
  4. {
  5.     int i,j,k;
  6.     int n= mid-l+1;
  7.     int m=h-mid;
  8.     int L[n+5],R[m+5];
  9.     for(i=0;i<n;i++)
  10.         L[i]=a[l+i];
  11.     for(j=0;j<m;j++)
  12.         R[j]=a[mid+1+j];
  13.  
  14.    i=0;
  15.    j=0;
  16.    k=l;
  17.    while (i < n && j < m)
  18.     {
  19.         if (L[i] <= R[j])
  20.         {
  21.             a[k] = L[i];
  22.             i++;
  23.         }
  24.         else
  25.         {
  26.             a[k] = R[j];
  27.             j++;
  28.         }
  29.         k++;
  30.     }
  31.  
  32.  
  33.     while (i < n)
  34.     {
  35.         a[k] = L[i];
  36.         i++;
  37.         k++;
  38.     }
  39.  
  40.     while (j < m)
  41.     {
  42.         a[k] = R[j];
  43.         j++;
  44.         k++;
  45.     }
  46. }
  47. void divide(int a[],int l,int h)
  48. {
  49.     if(l<h)
  50.     {
  51.         int mid= l+(h-l)/2;
  52.         divide(a,l,mid);
  53.         divide(a,mid+1,h);
  54.         merg(a,l,mid,h);
  55.     }
  56. }
  57. int main()
  58. {
  59.    int n;
  60.    cin>>n;
  61.    int a[n+5];
  62.    for(int i=0;i<n;i++)
  63.         cin>>a[i];
  64.         divide(a,0,n-1);
  65.     for(int i=0;i<n;i++)
  66.         cout<<a[i]<<endl;
  67. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement