使用优先级队列对半个数组进行排序的时间复杂度是多少?

What is the time complexity of sorting half an array using a priority queue?

所以我开发了一个使用最小堆的优先级队列,根据在线教程,使用优先级队列对整个数组进行排序需要 O(nlogn) 时间。这是因为我们提取 'n' 次,并且对于每次提取,我们都必须执行优先级修复,这需要 logn 时间。因此它是nlogn。

但是,如果我每次只想对半个数组进行排序,是否仍然是 O(nlogn) 时间?或者它只是 O(logn)?我想这样做的原因是因为我想获得具有中等优先级的元素,这似乎是通过提取一半元素使用优先级队列来完成它的唯一方法,除非有更直观的方法来获取元素优先队列中的中间优先级。

我觉得这个问题分为两部分,所以我分两部分回答:

(a) 如果我理解正确,排序 "half an array" 你的意思是获得给定数组的 (n/2) 最小值的排序数组。这将需要 O(n lg n) 时间。如果有一种比 O(n lg n) 时间更短的技术,那么每当我们想要对 n 个值的数组进行排序时,其最大值已知为 v(并且我们可以在 O(n) 中获得最大值时间),我们可以构造一个包含 2n 个元素的数组,其中前半部分是原始数组,后半部分填充大于 v 的值。然后,应用假设技术,我们实际上可以将原始数组排序为时间短于O(n lg n),这是已知的不可能。

(b) 但是如果我将 "the element with middle priority" 理解为数组中的中值元素是正确的,那么您可能对 this question.

感兴趣