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

来源:互联网 发布:ps4全境封锁网络优化 编辑:程序博客网 时间:2024/04/29 23:32
利用的不是数组而是向量,因为输入方便。
#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;} 

原创粉丝点击