Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- void MergeSort(int a [], int n);
- void copyarr(int a[], int b[], int n, int k=0);
- void arsort(int a[], int b[],int n, int c[], int i, int j, int k=0);
- void msort(int a [], int n);
- void MergeSort(int a [], int n){
- int *b, *c;
- if(n%2==0){
- b = new int[n/2];
- c = new int[n/2];
- copyarr(a, b, n/2);
- copyarr(a+ (n/2), c, n/2);
- for(int i(0); i<(n/2);++i){
- msort(b, n/2);
- msort(c, n/2);
- }
- } else{
- b = new int[n/2 + 1];
- c = new int[n/2];
- copyarr(a, b, n/2 +1);
- copyarr(a, c, n/2);
- for(int i(0); i<(n/2);++i){
- msort(b, n/2+1);
- msort(c+ (n/2), n/2);
- }
- }
- arsort(a, b, n,c, 0,0, 0);
- }
- void copyarr(int a[], int b[], int n, int k){
- if(k<n){
- b[k]=a[k];
- ++k;
- copyarr(a, b, n, k);
- }
- }
- void hqsort (int a[], int n, int b[],int k, int j){
- if(k<n){
- a[k++]=b[j++];
- hqsort(a,n,b,k,j);
- }
- }
- void arsort(int a[], int b[],int n, int c[], int i, int j, int k){
- if(k<(n-1)){
- if(b[i]<=c[j]){
- a[k]=b[i];
- ++k, ++i;
- if(i< n/2){
- arsort(a,b,n,c,i,j,k);
- } else {
- hqsort(a,n,c,k,j);
- }
- } else {
- a[k]=c[j];
- ++k, ++j;
- arsort(a,b,n,c,i,j,k);
- if(j< n/2){
- arsort(a,b,n,c,i,j,k);
- } else {
- hqsort(a,n,b,k,i);
- }
- }
- } else if(k==(n-1)){
- if(n%2!=0){
- a[k]=c[j];
- } else {
- a[k]=b[i];
- }
- }
- }
- void msort(int a [], int n){
- if(n>1){
- if(a[0]<a[1]){
- msort(a+1, n-1);
- } else{
- int c = a[0];
- a[0]=a[1];
- a[1]=c;
- msort(a+1,n-1);
- }
- }
- }
- int main(){
- int a [6] = {5,4,3,5,6,3};
- MergeSort(a, 6);
- for(int i(0); i<6; ++i){
- std::cout << a[i]<<std::endl;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement