算法导论—归并merge排序

来源:互联网 发布:mac鼠标windows系统 编辑:程序博客网 时间:2024/05/16 07:18
#include <iostream>#include <vector>#include <cmath>using namespace std;void Merge(vector<int> &vec,size_t p,size_t q,size_t r){auto n1=q-p+1;auto n2=r-q;vector<int> lhs(n1+1);vector<int> rhs(n2+1);for(int i=0;i<n1;++i)lhs[i]=vec[p+i];for(int j=0;j<n2;++j)rhs[j]=vec[q+j+1];    //哨兵lhs[n1]=10000;   rhs[n2]=10000;for(auto v:lhs)cout<<v<<" ";cout<<endl;for(auto v:rhs)cout<<v<<" ";cout<<endl;int i=0;int j=0;for(size_t k=p;k<=r;++k){if(lhs[i]<rhs[j]){vec[k]=lhs[i];i++;}else{vec[k]=rhs[j];j++;}}}void mergeSort(vector<int> &vec,size_t p,size_t r){if(p<r){size_t q=(p+r)/2;mergeSort(vec,p,q);mergeSort(vec,q+1,r);Merge(vec,p,q,r);}}int main(){vector<int> vec{5,2,4,7,1,3,2,6};mergeSort(vec,0,7);for(auto v:vec)cout<<v<<" ";cout<<endl;}

0 0
原创粉丝点击