首页 新闻 赞助 找找看

为什么这个程序会出现数组越界?我找了半天找不到

0
悬赏园豆:5 [已解决问题] 解决于 2018-06-25 17:36
def insert_sort(array):
    array_length = len(array)
    for i in range(1, array_length):
        j = i
        while(array[j] > array[j-1]):
            array[j], array[j-1] = array[j-1], array[j]
            j = j-1
    return array


if __name__ == '__main__':
    array = [1,6,2,4,8,3,7,5,9]
    print(insert_sort(array))

想要写一个插入排序,不知道为什么会越界?

小舔哥的主页 小舔哥 | 菜鸟二级 | 园豆:202
提问于:2018-06-25 17:23
< >
分享
最佳答案
0

数组的索引的最大值应该是数组的长度-1 是最后一个元素 所以 应该是 

 

def insert_sort(array): array_length = len(array) 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 return array if __name__ == '__main__': array = [1,6,2,4,8,3,7,5,9] print(insert_sort(array))

收获园豆:5
思念断了线 | 菜鸟二级 |园豆:263 | 2018-06-25 17:28

我后来想了一下,原来不是发生正越界,而是发生了负越界,我的程序不可能出现array[9],但是会出现array[-10]的情况,这个时候会越界。不过很感谢你

正确的代码是while行加一个判断:while((array[j] > array[j-1]) and j>=1):

小舔哥 | 园豆:202 (菜鸟二级) | 2018-06-25 17:36
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册