我目前正在尝试获取数据数组中最低一半的数值。这个数组一开始是未排序的。
基于此,
{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++编码并使用向量,但这个问题应该是相当普遍的。
std::partial_sort
(我假设这就是你的意思),因为它将等同于std::sort(start, middle);
。 - Fred Larson