归并排序(merge sort)c++实现

xiaoxiao2021-02-28  98

利用的不是数组而是向量,因为输入方便。 #include <iostream> #include <vector> #include <string> #include<climits> using namespace std; void merge(vector<int> &a,int p,int q,int r){ int max=INT_MAX; int n1=q-p+1; int n2=r-q; vector<int> L,R; for(int i=0;i<n1;++i){ L.push_back(a[p+i]);} for(int j=0;j<n2;++j){ R.push_back(a[q+j+1]);} L.push_back(max); R.push_back(max); //for(auto i:L){cout<<i<<" ";} //cout<<endl; //for(auto i:R){cout<<i<<" ";} //cout<<endl; int i=0,j=0; for(int k=p;k<=r;++k){ if(L[i]<=R[j]){ a[k]=L[i]; ++i;} else{ a[k]=R[j]; ++j;}}} void merge_sort(vector<int> &a,int p,int r){ if(p<r){ int q=(p+r)/2; merge_sort(a,p,q); merge_sort(a,q+1,r); merge(a,p,q,r);}} int main(){ vector<int> a; int b; while(cin>>b){a.push_back(b);} for(auto i:a){cout<<i<<" ";} cout<<endl; int r=a.size(); merge_sort(a,0,r-1); for(auto i:a){cout<<i<<" ";} return 0;}
转载请注明原文地址: https://www.6miu.com/read-40997.html

最新回复(0)