Matlab/simulink:一个数组 不用排序的方法 找出它当中第K大的数

高手请进!!完成继续给分!!会的速度点,小弟急啊!

设置个标志矩阵,先赋值都为1,做k次循环。每次循环,各元素和对应的标志位相乘,找最大的元素和对应位置,并把对应位置的标志位置零,再下次进行下次循环。第k次循环找到的最大数就是第k大的数。
(ps 本来不想贴具体语句的,还是好人做到底吧,呵呵)

a = [2 6 4 3 1 9 5 7 0 8];
flag = ones(size(a));
k = 5;
for j=1:k
[data i] = max(a.*flag);
flag(i) = 0;
end
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-09-23

推荐使用unique 函数,具体算法为:

        用unique找出所有的不重复数值, 

        然后得到的所有的不重复数值会自动由小到大显示,

        最后寻找出倒数第K个值则为结果

范例:

假如有一个列向量A,那么第K的数值为KAnswer,代码如下:

unimat = unique(A);

KAnswer = unimat(end-K+1);

第2个回答  2011-06-04
a = floor(rand(1,10) * 10)
a =
4 4 1 0 2 7 4 6 4 0
>> find(a==0)
ans =
4 10
>> find(a==7)
ans = 6 你懂的 啊B哥本回答被提问者采纳
第3个回答  2011-05-26
循环去掉k个最大的追问

能给个具体的语句吗