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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习---分治法和快速排序相关的知识,希望对你有一定的参考价值。

 

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

 

以上是关于算法学习---分治法和快速排序的主要内容,如果未能解决你的问题,请参考以下文章

死磕算法之快速排序

算法设计与分析期中考试复习:代码和经典题目 分治二分动态规划(未完待续)

算法--排序--分治与快速排序

算法浅谈——分治算法与归并快速排序(附代码和动图演示)

Java 快速排序算法

《数据结构与算法之美》09——排序归并排序与快速排序