How to take the X smaller values of an array ?
    2 次查看(过去 30 天)
  
       显示 更早的评论
    
Hello everyone,
I have an array x (for example size(x)= 1, 10) and x=(1, 4, 100, 3, 14, 56, 8, 90, 23, 2).
My question is how can I keep the 6 smaller values of x without making a sort ? Because when I do a sort, it changes the place of the values.
For example if y is the output array I want that y=(1, 4, 3, 14, 8, 2)
Thanks for reading.
0 个评论
采纳的回答
更多回答(1 个)
  Paxorus Sahay
 2016-7-27
        This sliding insertion technique might be what you're looking for.
function [minima] = smallest(vec, n)
    minima = vec(1:n);
    [maxElem, idx] = findMax(minima);
    for i = (n+1):length(vec)
        if vec(i) < maxElem
            minima(idx:end) = [minima(idx+1:end) vec(i)];
            [maxElem, idx] = findMax(minima);
        end
    end
end
function [maxElem, firstIndex] = findMax(vec)
    % assuming vec not empty
    maxElem = max(vec);
    allMatches = find(vec == max(vec));
    firstIndex = allMatches(1);
end
Example usage:
x = [1, 4, 100, 3, 14, 56, 8, 90, 23, 2];
y = smallest(x, 6);
0 个评论
另请参阅
类别
				在 Help Center 和 File Exchange 中查找有关 Shifting and Sorting Matrices 的更多信息
			
	产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


