中值排序发散

来源:互联网 发布:大型java项目开发案例 编辑:程序博客网 时间:2024/05/05 06:26

中值排序的平均时间性能是nlog(n),但是最坏情况下(基本有序),partition函数复杂度为O(n^2),这样就使得中值排序性能退化到O(n^2)。

随机选择pivotIndex将使得selectKth的性能为线性,可以避免退化情况,从而可以使中值排序平均性能达到O(nlogn)。

优化算法:有一个线性的选择算法,能够确保中值排序最坏情况仍为O(nlogn),称为BFPRT。


对于partition变种,倾向于选择加入随机中枢位置参数(return 最终分割位置),比起只选择最左作为中枢要更灵活,可以满足随机选取中枢要求。


针对partition想到:selectKth递归调用partition,可以用来选取第K大元素,更近一步可以解决TOP K问题(无序),而不止用堆这一种方法。据说面试有时会问道。


由中值排序想快排的演化:

快排和中值排序使用了大致相同的思想,但却比中值排序简单。

在快排中我们不再需要中值,而是通过某种策略选择一个元素,该元素将数组分为小于和大于两部分。同样快排也面临退化的情况(基本有序),最坏

性能也是O(n^2)。


原创粉丝点击