码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2017-09-09 18:15:24      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:规模   问题   sort   算法   ret   span   比较   turn   治法   

 

“分治者,分而治之也”分治法的主要思想就是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);
    }
}

 

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

标签:规模   问题   sort   算法   ret   span   比较   turn   治法   

原文地址:http://www.cnblogs.com/lytmy7/p/7498637.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!