Quicksort 是一种众所周知的算法,但破译 C 很复杂(对我而言)。内联版本大大加快了速度 http://www.corpit.ru/mjt/qsort.html .
但是,它是否可以轻松转换为输出 N 元素数组的前 m 个样本?
那么在第一个 m 个样本排序后简单地停止排序的调用?我怀疑不是,因为它对 block 进行快速排序,然后将 block 拼接在一起以获得最终输出。如果我将初始快速排序 block 大小设置为 m 的大小,那么我的处境很糟糕,没有利用 qsort 中的聪明东西。
提前致谢
烈酒
最佳答案
使用Quickselect ,正如@R .. 建议的那样,获取第一个 k
元素,然后对它们进行排序。获取元素的运行时间为 O(N),对元素进行排序的运行时间为 O(k log k)。
然而,emperical evidence suggests如果要选择的项目数 (k) 小于元素总数 (N) 的 1%,则使用二叉堆将比快速选择后排序更快。当我必须从 200 万个列表中选择 200 个项目时,堆选择算法要快得多。有关详细信息,请参阅链接的博客。
关于c - 快速排序,是否可以输出 N 维数组中的前 m 个排序值,从而比完整的 N 排序更快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19983038/