What Mistake I am making in the code
조회 수: 1 (최근 30일)
이전 댓글 표시
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
채택된 답변
Yongjian Feng
2021년 11월 4일
편집: Yongjian Feng
2021년 11월 4일
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
추가 답변 (1개)
Steven Lord
2021년 11월 4일
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
참고 항목
카테고리
Help Center 및 File Exchange에서 Shifting and Sorting Matrices에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!