分治法分析
分治法步骤:
1。分解:将原问题分解成一系列子问题
2。解决:递归的解决各个子问题,若子问题足够小,则直接解决
3。合并:将子问题的结果合并成原问题的解。
#include<iostream> #include<climits> #include<vector> using namespace std; void merge(int a[],int p,int q,int r){ int n1=q-p,n2=r-q; vector<int> L(a+p,a+q),R(a+q,a+r); for(int k=p,i=0,j=0;k<r;++k){ if(i==n1){ for(;k<r;++k,++j) a[k]=R[j]; } else if(j==n2){ for(;k<r;++k,++i) a[k]=L[i]; } else{ if(L[i]<=R[j]) a[k]=L[i++]; else a[k]=R[j++]; } } } void merge_sort(int *a,int p,int r){ if(p<r-1){ int q=(p+r)/2; merge_sort(a,p,q); merge_sort(a,q,r); merge(a,p,q,r); } } int main() { int a[]={1,23,13,-18,22,33,10,-98}; merge_sort(a,0,8); for(int i=0;i<8;++i) cout<<a[i]<<" "; }