您的位置:首页 > 理论基础 > 数据结构算法

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

2013-08-09 16:59 323 查看
快速排序的时间复杂度为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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: