一、算法概述
主要就是两个方面影响速度:
1.选主元
2.分子集
快速排序最好情况:每次选主元都正好中分子集,T(N)=O(NlogN)
二、选主元
三、子集划分
1.先判定左边指针i,直到碰到不符合的位置,停下不动;
2.再开始判定右边指针j,直到直到碰到不符合的位置,停下不动;
3.交换左右指针元素
重复新一轮
直到最后,
当两个指针都停下来,且此时i>j——i是要找的主元位置
快速排序的主元选定后,会被一次性放到全局正确的位置上,以后再不会移动。
1.如果选择停下来交换,虽然多了很多次无意义的交换,但是最后主元的位置靠近中间,后面的递归操作的时间复杂度较低
2.如果选择不理它,虽然避免了很多次无意义的交换,但是最后主元的位置靠近端点,后面的递归操作的时间复杂度更高
因为有相等元素的交换;
且选主元带有随机性,可能不是该序列中第一个出现的该元素值,但是可能交换到前面;
快速排序是不稳定的排序。
四、小规模数据Cutoff
五、同一函数接口