php中文网

插入排序出现数组越界的原因是什么?

php中文网

插入排序出现数组越界的原因

在给定的插入排序函数中出现了数组越界错误。问题在于排序代码循环中索引管理。

for i in range(1, array_length):

在这个循环中,变量 array_length 代表数组的长度,而 i 从 1 开始。因此,最大的合法索引应该是 array_length - 1,因为数组中的最后一个元素的索引应该是长度减 1。

在内层循环中,我们使用了 j >= i 作为条件来交换元素,这可能导致 j 越界。例如,当 i = array_length - 1 时,j = i 将等于 array_length - 1,而 array[j] 和 array[j-1] 都将越界。

修正后的代码

修正这个问题的方法是将循环范围更改为 range(1, array_length - 1)。这样,最大的合法索引将是 array_length - 2,并且 j 将永远不会越界。

for i in range(1, array_length - 1):
    j = i
    while(array[j] > array[j-1]):
        array[j], array[j-1] = array[j-1], array[j]
        j = j-1

以上就是插入排序出现数组越界的原因是什么?的详细内容,更多请关注php中文网其它相关文章!