分治法分析

分治法步骤:

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]<<" ";
}

posted @ 2010-10-12 20:38  hailong  阅读(169)  评论(0编辑  收藏  举报