数据结构常用算法复习---快速排序

快速排序的时间复杂度为O(nlogn),在排序算法中效率较高,所以经常被采用。快排的思想为分治法,软件公司笔试面试中经常会考到该算法。
算法的基本思想:

1.先从数列中抽出一个数作为基准数

2.分区过程,将比这个数大的数全部放在右边,将比这个数小的全放在左边

3.对第二步分区得到的两个区在进行分区,直到每一个区中只有一个数

算法过程举例:

原始数列: 27 99 11 37 92 78 21 35 57 62

1.抽出一个数作为基数:27(low=0,high=9)

2.分区,从右往左找,找到比27小的数(62比27大,high--,57比27大,high—….)

21 99 11 37 92 78 27 35 57 62(low=0,high=6)

再从左往右找比27大的数字,21 27 11 37 92 78 99 35 57 62(low=1,high=6)

再从high=6的基础上往左找,找到11比27小 21 11 27 37 92 78 99 35 57 62(low=1,high=1)

此时low<high的条件不满足,结束分区。

3.对每一个分区重复第二步

代码:

int Partion(int a[],int low,int high)
{
    int key;
    key = a[low];
    while(low<high){
        while((low<high)&&a[high]>=key)  
        high--;
        a[low]=a[high];
        while((low<high)&&a[low]<=key)
        low++;
        a[high]=a[low];  
    }   
    a[low] = key; 
    return low;
}
void qsort(int a[],int low,int high){
    int loc=0;
    if(low<high){
        loc= Partion(a,low,high);
        qsort(a,low,loc-1);
        qsort(a,loc+1,high);   
    }
}

 

原文地址:https://www.cnblogs.com/sysu-kiros/p/3248667.html