一、算法概述


主要就是两个方面影响速度:
1.选主元
2.分子集
快速排序最好情况:每次选主元都正好中分子集,T(N)=O(NlogN)
二、选主元


三、子集划分

1.先判定左边指针i,直到碰到不符合的位置,停下不动;
2.再开始判定右边指针j,直到直到碰到不符合的位置,停下不动;
3.交换左右指针元素
重复新一轮

直到最后,
当两个指针都停下来,且此时i>j——i是要找的主元位置
快速排序的主元选定后,会被一次性放到全局正确的位置上,以后再不会移动。

1.如果选择停下来交换,虽然多了很多次无意义的交换,但是最后主元的位置靠近中间,后面的递归操作的时间复杂度较低
2.如果选择不理它,虽然避免了很多次无意义的交换,但是最后主元的位置靠近端点,后面的递归操作的时间复杂度更高
因为有相等元素的交换;
且选主元带有随机性,可能不是该序列中第一个出现的该元素值,但是可能交换到前面;
快速排序是不稳定的排序。
四、小规模数据Cutoff


五、同一函数接口
本文详细探讨了快速排序算法中选主元策略对速度的影响,比较了交换与不交换的决策,并介绍了小规模数据处理技巧。讨论了随机性和稳定性问题,以及如何通过Cutoff优化性能。
348

被折叠的 条评论
为什么被折叠?



