Для сортировки вы хотите перебрать все элементы , кроме последнего , чтобы вы могли сравнить эти элементы со всеми элементами, которые идут после этого.Измените ваш код следующим образом:
q = [3, 1, -1, 4, 2, 0];
disp(q)
min = q(1);
for s = 1:length(q)-1
for i = s+1:length(q)
if q(i) <= min
qRiserva = q(s);
min = q(i);
q(s) = min;
q(i) = qRiserva;
end
end
s = s+1;
min = q(s);
end
disp(q)
Таким образом, внешний цикл проходит по всем элементам, кроме последнего, а внутренний цикл - по остальным элементам.Исходный код зацикливался на s:length(q)
, означая, что в какой-то момент i==s
, и поэтому сравнивал элемент с самим собой и менял его с собой.Таким образом, здесь мы зациклим i=s+1:length(q)
.
Но вам также не нужно min
:
function so
q = [3, 1, -1, 4, 2, 0];
disp(q)
for s = 1:length(q)-1
for i = s+1:length(q)
if q(i) <= q(s)
qRiserva = q(s);
q(s) = q(i);
q(i) = qRiserva;
end
end
end
disp(q)
И, наконец, у MATLAB есть хитрый трюк для обмена двумя элементами в массиве:
function so
q = [3, 1, -1, 4, 2, 0];
disp(q)
for s = 1:length(q)-1
for i = s+1:length(q)
if q(i) <= q(s)
q([s,i]) = q([i,s]); % swap
end
end
end
disp(q)