c_cpp 合并排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 合并排序相关的知识,希望对你有一定的参考价值。

#include <bits/stdc++.h>
using namespace std;

//  #Sorting #Theory

void Merger(vector<int> &a, int l,int m,int r){
    int ls=(m-l)+1; // size of left array
    int rs=(r-(m+1))+1; // size of right array
    vector<int> lar(ls);    // left array
    vector<int> rar(rs);    // right array
    for(int i=0;i<ls;i++){  // copying left array
        lar[i]=a[l+i];
    }
    for(int i=0;i<rs;i++){  // copying right array
        rar[i]=a[m+1+i];
    }
    int i=0;    // iterator for left array
    int j=0;    // iterator for right array
    int k=l;    // iterator for main array
    while(i<ls && j<rs){    // filling in the array by comparing
        if(lar[i]<=rar[j]){	// until any array becomes empty
            a[k]=lar[i];
            i++;
        }else{
            a[k]=rar[j];
            j++;
        }
        k++;
    }
    while(i<ls){    // if rar is emptied then add all of lar elements
        a[k]=lar[i];
        i++;
        k++;
    }
    while(j<rs){    // // if rar is emptied then add all of lar elements
        a[k]=rar[j];
        j++;
        k++;
    }
    
}
void MergeSort(vector<int> &a,int l,int r){    // passing vector by reference
    if(l<r){ // Base case: size>1 or l<r
        int m=l+((r-l)/2);
        MergeSort(a,l,m);   // Sort all left elements
        MergeSort(a,m+1,r); // Sort all right elements
        Merger(a,l,m,r);    // Merge the sorted arrays
    }
}

int main(){
    int t;
    cin>>t;
    while(t--){
        int n;
        cin>>n;
        vector<int> a(n);
        for(int i=0;i<n;i++){
            cin>>a[i];
        }
        cout<<"Original: ";
        for(int i=0;i<n;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl;
        MergeSort(a,0,n-1);
        cout<<"Sorted: ";
        for(int i=0;i<n;i++){
            cout<<a[i]<<" ";
        }
        cout<<endl;
        
    }
    
    return 0;
}

以上是关于c_cpp 合并排序的主要内容,如果未能解决你的问题,请参考以下文章

c_cpp 合并排序

c_cpp 合并排序

c_cpp 合并排序

c_cpp 合并排序

c_cpp 合并数组排序

c_cpp 21.合并两个排序列表