算法学习---分治法和快速排序

 

“分治者,分而治之也”分治法的主要思想就是1.若问题足够小,解决并返回 2.若问题规模不够小,减小问题规模。分治法,很容易理解,就是大而化小,小而化了的思想,把问题划分成你能解决的问题。

// 分治法
divide_and_conquer(P)
{
    if(|P|<=n0){
        process(P);
    }
       else{
          divide P into smaller subinstances P1,P2,...,Pk
        for(int I=1;I<k;i++)
            yi=divide_and_conquer(P1);
        merge(y1,y2,...,yk);
    }
 } 
 
//快速排序
int partition(int a[],int p,int r)
{
    int i=p;
    int j=r+1;
    int x=a[p];
    while(true)
    {
        while(a[++i]<x);             //找到>=的x 
        while(a[--i]<x);             //找到<=的x
        if(i>=j){
            break;
        } 
        swap(a,i,j);
    }
    a[p]=a[j];
    a[j]=x;
    return j;
}
void quickSort(int a[],int p,int r)
{
    if(p<r){
        int q=partition(a,p,r);            //找到参考比较元素 
        quickSort(a,p,q-1);                //递归过程 
        quickSort(a,q+1,r);
    }
}

 

posted on 2017-09-09 16:46  尧易  阅读(159)  评论(0编辑  收藏  举报

导航