Matlab:i = 2,如果B(i)> B(i + 1)......下标索引错误,必须为正整数

时间:2018-02-19 00:03:31

标签: matlab indexing subscript

我正在为类编写一个排序算法,这个错误出现在第14行,下标索引必须是实数正整数或逻辑。我在不同的线程中搜索答案,但答案似乎令人困惑,与我的问题无关。我理解错误的含义,但我不知道为什么我的代码失败了。 i = 2是一个正整数,没有非整数或负整数的除法或乘法,据我所知,在下标索引的位置没有零。我不明白。在此先感谢您的帮助!

function bubblesort(A)
%bubble sorting algo
B=A;
c=numel(B);
%count the number of elements in a, store it as c
if B(1)>B(2)
    left=B(1);
    right=B(2);
    B(1)=right;
    B(2)=left;
end
i=2;
while i+1<=c
    **if B(i)>B(i+1)**
        left=B(i);
        right=B(i+1);
        B(i)=right;
        B(i+1)=left;
        i=i-1;
    else
        i=i+1;
    end
end
B
end

1 个答案:

答案 0 :(得分:1)

问题是(除非A的第一个元素已经是最小的),i = i-1行将使最小元素的i = 0,并且代码将失败。我认为如果i> 1,可以修复该函数。

function bubblesort(A)
%bubble sorting algo
B = A;
c = numel(B);
%count the number of elements in a, store it as c  

i = 1;
while i+1 <= c
    if B(i) > B(i+1)
        left = B(i);
        right = B(i+1);
        B(i) = right;
        B(i+1) = left;
        if i > 1
            i = i-1;
        end
    else
        i = i+1;
    end
end
B
end