Azzera filtri
Azzera filtri

What Mistake I am making in the code

1 visualizzazione (ultimi 30 giorni)
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);

Risposta accettata

Yongjian Feng
Yongjian Feng il 4 Nov 2021
Modificato: Yongjian Feng il 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

Più risposte (1)

Steven Lord
Steven Lord il 4 Nov 2021
FYI you can perform a swapping operation in one step without needing an explicit temporary:
x = (1:10).^2
x = 1×10
1 4 9 16 25 36 49 64 81 100
toSwap = [4 7]
toSwap = 1×2
4 7
x(toSwap) = x(flip(toSwap)) % key step
x = 1×10
1 4 9 49 25 36 16 64 81 100
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))
x = 1×10
64 1 25 49 4 36 16 9 81 100
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.

Categorie

Scopri di più su Shifting and Sorting Matrices in Help Center e File Exchange

Prodotti


Release

R2021a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by