What Mistake I am making in the code
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
Manav Divekar
am 4 Nov. 2021
Beantwortet: Steven Lord
am 4 Nov. 2021
I want to randomly pick two numbers from [39 25 91 71] swap it. and use while loop so that it swaps continuely until the vector is sorted. and display the sorted vector.
function out = sortbyrandomswaps(n)
x = 0;
y = 0;
while ~ all(diff(n)>=0)
x = n(randi(numel(n)));
y = n(randi(numel(n)));
x = a;
y = x;
a = y;
end
out = all(diff(n)>=0);
0 Kommentare
Akzeptierte Antwort
Yongjian Feng
am 4 Nov. 2021
Bearbeitet: Yongjian Feng
am 4 Nov. 2021
Maybe this:
sortbyrandomswaps([5 4 3 2 1]);
function out = sortbyrandomswaps(n)
while ~ all(diff(n)>=0)
idx1 = randi(numel(n));
idx2 = randi(numel(n));
a = n(idx2);
n(idx2) = n(idx1);
n(idx1) = a;
disp(n); % for debug only. Remove it if everything works.
end
out = all(diff(n)>=0);
end
0 Kommentare
Weitere Antworten (1)
Steven Lord
am 4 Nov. 2021
FYI you can perform a swapping operation in one step without needing an explicit temporary:
x = (1:10).^2
toSwap = [4 7]
x(toSwap) = x(flip(toSwap)) % key step
You could generalize this a bit if you wanted to swap a series of elements.
toSwap2 = [2 5 3 8 1];
x(toSwap2) = x(circshift(toSwap2, 1))
The second element of x goes to position 5, the fifth to position 3, the third to position 8, the eighth to position 1, and the first to position 2.
0 Kommentare
Siehe auch
Kategorien
Mehr zu Shifting and Sorting Matrices finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!