# 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.

3 views (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]
##### 1 CommentShow -1 older commentsHide -1 older comments
Walter Roberson on 28 Sep 2018

Sign in to comment.

### Answers (3)

ANKUR KUMAR on 28 Sep 2018
Edited: ANKUR KUMAR on 28 Sep 2018
Firstly, please follow Walter Roberson's comment.
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)]
##### 5 CommentsShow 3 older commentsHide 3 older comments
ANKUR KUMAR on 28 Sep 2018
Oh sorry. I forgot to take this into consideration. This will work.
A = [1, 3, 2, 1, 10]
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
I edited my first answer.

Sign in to comment.

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;
##### 1 CommentShow -1 older commentsHide -1 older comments
Stephen23 on 28 Sep 2018
+1 probably the neatest way to do this.

Sign in to comment.

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.
##### 3 CommentsShow 1 older commentHide 1 older comment
Bruno Luong on 28 Sep 2018
Edited: Bruno Luong on 28 Sep 2018
But your (Ankur's) code and Stephen's code do not perform the same arrangement in the case of tie. And poster never specify which one he actually needs.
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

Sign in to comment.

### Categories

Find more on Logical 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!