编辑2:正如Eitan指出的那样,答案的第一部分没有解决找到最小的第m个值但是关于最小值之后的第m个元素的问题.其余的答案仍然是…… 1对于Eitan的锐度.
尽管排序可能非常有效,但您可以尝试查看查找是否会更好.例如:
id=find(X>min(X),m,'first');
id(end) % is the index of the smallest m-th element in X
函数find添加了一些功能,可以让您找到符合某个条件的“first”或“last”元素.例如,如果要查找数组X中的前n个元素小于值y,请使用find(X< y,n,'first') 一旦遇到满足条件的第一个元素,此操作就会停止,如果数组很大并且您找到的值恰好远离结尾,则可以节省大量时间.
我还想回顾@woodchips在this SO discussion中已经说过的与你的问题有些相关的内容:
加速基本内置算法(如sort)的最佳方法是获得更快的硬件.它也将加速其他一切. MATLAB已经在内部使用优化代码以高效的方式完成了这项工作.说到这一点,也许GPU附加组件也可以改善这一点……
编辑:
值得一提的是,除了Muster的评论之外,还有一个名为nth_element的FEX文件,它是C的MEX包装,可以在O(n)时间内获得所需的解决方案. (类似于@DDD指出的)