您的位置:首页 > 其它

快速排序学习笔记

2014-11-02 11:26 169 查看
学习资料出处:白话经典算法系列之六
快速排序 快速搞定

快速排序采用分治策略,其基本思想:

1) 从数列中选一个元素X作为基准数

2) 分区过程,把不小于X的元素放到X的右边,小于X的元素放到X的左边

3) 再对左右区间重复进行分区操作,直到各区间只有一个数

MoreWindows总结的“挖坑填数+分治法”非常到位,其中挖坑填数将分区过程剖析的很透彻,一目了然。运用“挖坑填数”,将分区过程的步骤总结为以下4点:

1) i = left; j=right;将基准数X挖出形成第一个坑a[i],X=a[i]

2) j--,从后往前找出大于或等于基准数X的数,找到后挖出并填入前一个坑a[i]中,a[i] = a[j],此时形成新的坑a[j]

3) i++,从前往后找出不小于基准数X的数,找到后挖出并填入前一个坑a[j]中,a[j] = a[i];此时形成新的坑a[i]

4) 重复执行步骤2)、3),直到i==j,然后将基准数填入a[i]中,a[i]=X

复杂度分析

挖坑填数的分区过程,会将区间[left, right]的元素轮询一遍,其时间复杂度为O(n);基于分治法,递归调用次数为O(log(n)),因此快速排序总的时间复杂度为O(n*log(n))。

递归调用编程实现如下,若采用迭代实现呢?

测试代码:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: