# I have to switch the max and min elements in a vector and assume vec = ceil(rand(1, 10)*100) is a vector containing 10 random generated integers. The script i have to provide will swap the maximum and the minimum element in the vector.

1 view (last 30 days)
Bryce Imbriale on 28 Sep 2018
Commented: Stephen23 on 28 Sep 2018
I don't even know where to start, any help? Example: vec=[ 16 98 96 49 81 15 43 92 80 96], you script will result in vec = [ 16 15 96 49 81 98 43 92 80 96]
Walter Roberson on 28 Sep 2018

ANKUR KUMAR on 28 Sep 2018
Edited: ANKUR KUMAR on 28 Sep 2018
A=[ 16 98 96 49 81 15 43 92 80 96]
A([find(A==min(A)),find(A==max(A))])=ones(1,length(find(A==min(A))))*max(A),ones(1,length(find(A==max(A))))*min(A)]
ANKUR KUMAR on 28 Sep 2018

Bruno Luong on 28 Sep 2018
Solution for the problem of "swapping" ties min-values with ties max-values
minA = min(A);
maxA = max(A);
ismax = A==maxA;
A(A==minA) = maxA;
A(ismax) = minA;
Stephen23 on 28 Sep 2018
+1 probably the neatest way to do this.

Stephen23 on 28 Sep 2018
Edited: Stephen23 on 28 Sep 2018
Even though this is homework without any attempt... here is a neat and efficient MATLAB way to do that (this swaps the first minimum and the first maximum):
>> vec = [16,98,96,49,81,15,43,92,80,96]
vec =
16 98 96 49 81 15 43 92 80 96
>> [~,idn] = min(vec);
>> [~,idx] = max(vec);
>> vec([idn,idx]) = vec([idx,idn])
vec =
16 15 96 49 81 98 43 92 80 96
Of course you cannot hand this in as your own work, because that would be plagiarism.
Stephen23 on 28 Sep 2018
Edited: Stephen23 on 28 Sep 2018
Swap all tied maximum/minimum values:
>> vec = [15,16,96,96,49,81,15,43,92,80,96]
vec =
15 16 96 96 49 81 15 43 92 80 96
>> idn = find(min(vec)==vec);
>> idx = find(max(vec)==vec);
>> vec([idn,idx]) = vec([idx(1)*ones(1,numel(idn)),idn(1)*ones(1,numel(idx))])
vec =
96 16 15 15 49 81 96 43 92 80 15