How to find second largest value in an array?
    96 views (last 30 days)
  
       Show older comments
    
Hi
I want to find the second largest and minimum value in array? A=[1;10;15;30;40;50;100].I want to get the result as Second minimum value=10 and second largest value=50 Help me plz...
1 Comment
  Walter Roberson
      
      
 on 7 Jun 2013
				What do you want to do if there are multiple instances of the maximum or minimum?
Accepted Answer
  Andrei Bobrov
      
      
 on 7 Jun 2013
        
      Edited: Andrei Bobrov
      
      
 on 7 Jun 2013
  
      [ii,ii] = sort(A);
out = A(ii([2,end-1]));
for your example (A) just:
out = A([2,end-1]);
more variant
A1 = unique(A);
out = A1([2,end-1]);
8 Comments
  Walter Roberson
      
      
 on 10 Feb 2019
				Amjad Iqbal comments,
Hello Researchers!! I need guidance, as i have a matrix H1 of 1576*1024, which is vertical concatination of four channels, in H1 for continuous four rows it represent one frame of each channel, i need to find maximum and second value for every four group of rows. untill now i just get to find maximum and minimum value for each row. kindly guide me, how can i apply 2nd loop or design function, so that i can get results of second maximum for each four group of rows, and in total i will have 394 max and 394 second maximum results.
H1 = vertcat(A,B,C,D)
temp_A = zeros(1576,2);
for N = 1:1:1576
   temp_A(N,1) = max(H1(N,:));
   temp_A(N,2) = min(H1(N,:));
end
More Answers (5)
  Fernando
      
 on 17 Nov 2014
        
      Edited: Walter Roberson
      
      
 on 14 Oct 2017
  
      function [ y ] = second_min( x )
   y = min(x(x>min(x)));
end
&
function [ y ] = second_max( x )
   y = max(x(x<max(x)));
end
6 Comments
  Walter Roberson
      
      
 on 10 Oct 2020
				Define second largest. In the array [1,2,3,3] what is the second largest? Is it 2 or is it 3?
  Steven Lord
    
      
 on 6 Nov 2017
        1 Comment
  Pen-Li (Ben) Yu
      
 on 3 Nov 2021
				A=[1;10;15;30;40;50;100];
Amax2 = maxk(A,2); Amax2(2)
Amin2 = mink(A,2); Amin2(2)
  Dedaunan Rimbun
 on 5 Nov 2017
        
      Edited: Dedaunan Rimbun
 on 5 Nov 2017
  
      I think this one is the best. It has some pros:
- You can specify the largest, second largest, third largest, and so on.
- You can also see the index
Note: I just modify what Walter Roberson suggest.
   for k=1:s                                  %s is the number highest number will be shown
        k2=0;
        for K = A'
            k2=k2+1;
            if sum(A > K) == k-1              
                M(k,1)=K;
                I(k,1)=k2;
            end
        end
    end
0 Comments
See Also
Categories
				Find more on Surface and Mesh Plots in Help Center and File Exchange
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!















