我目前正在尝试获取位于数据数组下半部分的值。这个数组起初是未排序的。
由此:
{4,6,9,3,8,5}
对此:
{3,4,5,6,9,8} or {3,4,5}
一个简单的解决方案是对数组进行排序(使用快速排序),然后仅使用存储在排序数组的前半部分中的值。然而,由于快速排序和最有效的排序算法将对整个数组进行排序,而我只需要前 50%,这似乎是对资源的浪费。请注意,性能是该项目中的一个问题。
知道完整排序是 O(n log n) 并且在找到最低元素后停止的排序是 O(n),我可以轻松构建一个简单的算法,该算法的复杂度为 n/2 * n最低的 50%。但这真的比完整的快速排序更好吗?
需要明确的是,如果我们只想要数组中最低一半的值,最好使用什么排序?如果 50% 更小(如 1%),顺序搜索最低元素当然是最快的解决方案,但它比快速排序慢多少?
我正在用 C++ 编码并使用向量,但是这个问题应该很笼统。