VasilM

merge_sort

Nov 20th, 2012
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.66 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. int a[1000000], c[1000000], n;
  6.  
  7. void merge( int u, int v, int w ){
  8.     int i,j,k;
  9.    
  10.     for( i=u, j=v+1, k=0; i<=v && j<=w; k++){
  11.         if( a[i] <= a[j] ) c[k] = a[i++];
  12.         else c[k] = a[j++];
  13.     }
  14.  
  15.     if( i>v ) for( i=j; i<=w; i++) c[k++] = a[i];
  16.     else for( j=i; j<=v; j++) c[k++] = a[j];
  17.  
  18.     for ( i=0; i<k; i++ ) a[ u+i ] = c[i];
  19. }
  20.  
  21.  
  22. void  merge_sort( int p, int q ){
  23.     if( p==q ) return;
  24.     merge_sort( p, (q+p)/2 );
  25.     merge_sort( (q+p)/2+1, q );
  26.     merge( p, (q+p)/2, q);
  27. }
  28.  
  29.  
  30. void main(){
  31.     cin >> n;
  32.     for( int i=0; i<n; i++ ) cin >> a[i];
  33.  
  34.     if(n!=1) merge_sort(0, n);
  35.  
  36.     for( int i=0; i<n; i++ ) cout << c[i]<< " ";
  37. }
Advertisement
Add Comment
Please, Sign In to add comment