分治法分析
分治法步骤:
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]<<" ";
}

浙公网安备 33010602011771号