How to take the X smaller values of an array ?
    2 views (last 30 days)
  
       Show older comments
    
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 Comments
Accepted Answer
More Answers (1)
  Paxorus Sahay
 on 27 Jul 2016
        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 Comments
See Also
Categories
				Find more on Shifting and Sorting Matrices in Help Center and File Exchange
			
	Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

