我必须写一个高效伪代码来查找带有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)复杂性
答案 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)?