数组中第i个最小元素的伪代码和复杂性

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

标签: arrays algorithm sorting mergesort

我必须写一个高效伪代码来查找带有n个元素的未排序数组中的第i个最小元素,其中n,i和A [n]是输入数据。

在我看来,这意味着我必须编写伪代码以按递增的顺序对数组进行排序。我正准备选择排序,但我再次阅读了这个问题,它说高效所以让我们使用合并排序!

我的伪代码是:

    {

    n<---length[A]
    if (n<2)
       return

    mid <--- n/2
    left<---array of size(mid)
    right<---array of size(n- mid)
    for i<---0  to mid-1
    left[i]<--- A[i]
    for i<---mid  to n-1
    right [i-mid]<---A[i]
    Mergesort(left)
    Mergesort(right)
    Merge(left,right,A)
}

所有情况的复杂性(最差的平均最佳)是O(nlogn)。这意味着这个算法非常快!

我的解决方案是否正确

编辑:我的问题非常具体,它要求一个高效算法。这意味着我们需要一个快速的算法。你一直试图添加为复制的那些算法效率不高他们有O(n)复杂性

1 个答案:

答案 0 :(得分:0)

1 您的算法非常快。

使用几乎任何已知的良好标准排序,您可以获得O(n log n)来对整个数组进行排序。然后取第i个(例如,数组中的立即数)

2 您的伪代码未完成。它返回了什么?

一些注意事项:

如果我很少,只需迭代并保持最小数据(如果它小于这些数据的最大值,则将每个新数据插入到i最小数据的二叉树中) 。它需要&lt;上) 。记录我

如果我变大,只需排序所有内容=&gt; O(n.log n)

有关详细信息,请参阅sudomakeinstall2已经提供的链接:

How to find the kth largest element in an unsorted array of length n in O(n)?