K数组中最大的元素,排序算法

时间:2016-11-09 01:09:44

标签: arrays algorithm sorting

我一直坚持这个问题,并希望有人能给出答案并解释。

给出一个没有重复元素的未排序数组A,并要求找到Kth 按降序排序的最大元素。例如,如果A是数组[11,6,1,2,15,7,4,8,20]和 K = 3,那么答案应该是[20,15,11]。描述如何修改选择排序和 heapsort解决这个问题(两个单独的答案)。什么是最坏的情况下你的运行时间 算法,作为N = A.length和K?

的函数

1 个答案:

答案 0 :(得分:3)

通常选择哪种选择:

  • 找到最高元素,换到第一名
  • 查找下一个最高元素,交换到第二位
  • ...
  • 查找倒数第二个元素,交换到倒数第二个位置
  • 完成。

正常运行时间为O(N * N),因为每个N步骤都是搜索问题,即O(N)

  

您可以在找到第一个K元素时停止。如果你提早中止,那就不再是N步了;但每一步都没有改变。

等大O

  因此,中止选择排序的

O(K * N)

堆分类分两步完成:heapify和siftdown。 Heapify(创建堆结构)必须正确完成,并且它将保持不变。由于它在比siftdown更少的操作中执行,因此从堆排序的大O中省略它。

Siftdown(将堆中的元素交换为排序数组)与选择排序非常非常相似,但在每个N步骤中执行以查找下一个最高元素的操作更快:{{1} }。

  

由于siftdown几乎完全相同,从概念上讲,作为选择排序,你可以在它找到最高O(log N)结果后立即中止。

这意味着大O

  因此,中止堆排序的

K