Advertisement
Utkar5hM

MergeSort :| depression Way

Mar 16th, 2021
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.01 KB | None | 0 0
  1. #include <iostream>
  2. void MergeSort(int a [], int n);
  3. void copyarr(int a[], int b[], int n, int k=0);
  4. void arsort(int a[], int b[],int n,  int c[], int i, int j, int k=0);
  5. void msort(int a [], int n);
  6. void MergeSort(int a [], int n){
  7.     int *b, *c;
  8.     if(n%2==0){
  9.         b = new int[n/2];
  10.         c = new int[n/2];
  11.         copyarr(a, b, n/2);
  12.         copyarr(a+ (n/2), c, n/2);
  13.         for(int i(0); i<(n/2);++i){
  14.         msort(b, n/2);
  15.         msort(c, n/2);
  16.         }
  17.     } else{
  18.         b = new int[n/2 + 1];
  19.         c = new int[n/2];
  20.         copyarr(a, b, n/2 +1);
  21.         copyarr(a, c, n/2);
  22.         for(int i(0); i<(n/2);++i){
  23.         msort(b, n/2+1);
  24.         msort(c+ (n/2), n/2);
  25.         }
  26.     }
  27.     arsort(a, b, n,c, 0,0, 0);
  28. }
  29. void copyarr(int a[], int b[], int n, int k){
  30.     if(k<n){
  31.     b[k]=a[k];
  32.     ++k;
  33.     copyarr(a, b, n, k);
  34.     }
  35. }
  36. void hqsort (int a[], int n, int b[],int k, int j){
  37.     if(k<n){
  38.         a[k++]=b[j++];
  39.         hqsort(a,n,b,k,j);
  40.     }
  41. }
  42. void arsort(int a[], int b[],int n,  int c[], int i, int j, int k){
  43.     if(k<(n-1)){
  44.         if(b[i]<=c[j]){
  45.             a[k]=b[i];
  46.             ++k, ++i;
  47.             if(i< n/2){
  48.             arsort(a,b,n,c,i,j,k);
  49.             } else {
  50.             hqsort(a,n,c,k,j);
  51.             }
  52.         } else {
  53.             a[k]=c[j];
  54.             ++k, ++j;
  55.             arsort(a,b,n,c,i,j,k);
  56.             if(j< n/2){
  57.             arsort(a,b,n,c,i,j,k);
  58.             } else {
  59.                 hqsort(a,n,b,k,i);
  60.             }
  61.         }
  62.     } else if(k==(n-1)){
  63.         if(n%2!=0){
  64.             a[k]=c[j];
  65.         } else {
  66.             a[k]=b[i];
  67.         }
  68.     }
  69.  
  70. }
  71. void msort(int a [], int n){
  72.     if(n>1){
  73.     if(a[0]<a[1]){
  74.         msort(a+1, n-1);
  75.     } else{
  76.         int c = a[0];
  77.         a[0]=a[1];
  78.         a[1]=c;
  79.         msort(a+1,n-1);
  80.     }
  81.     }
  82. }
  83. int main(){
  84.     int a [6] = {5,4,3,5,6,3};
  85.     MergeSort(a, 6);
  86.     for(int i(0); i<6; ++i){
  87.         std::cout << a[i]<<std::endl;
  88.     }
  89.     return 0;
  90. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement