插入排序错误列表索引

时间:2017-03-17 21:58:43

标签: python insertion-sort insertion

我正在尝试创建一个由7个随机生成的数字组成的数组,然后使用插入排序方法将这些数字从最小值排序到最高值。我已经浏览了几个以前回答过的主题,因为这是一个非常常见的问题,但是每个用户都有不同的代码,这让我想知道我哪里出错了。

import random # importing the random module
arrayInsertion = []

for i in range (7): # 7 different numbers
    arrayInsertion.append(random.randint (1,10))

for i in range (1,7):
    while  i > 0 and arrayInsertion [i+1] > arrayInsertion [i]:
        arrayInsertion [i] = arrayInsertion [i-1]
        i = i - 1
print (arrayInsertion)

运行此代码时,我收到以下错误消息:

  

追踪(最近一次通话):   文件" C:\ Users \ Ben \ Desktop \ insertion sort.py",第8行,in   而我> 0和arrayInsertion [i + 1]> arrayInsertion [i]:   IndexError:列表索引超出范围

4 个答案:

答案 0 :(得分:1)

arrayInsertion[i + 1]然后i = 7超出范围时问题为i,因为列表中只有7元素。你也不记得当前的价值和指数。

for i in range(1, len(arrayInsertion)):
    curr = arrayInsertion[i]
    pos = i
    while pos > 0 and arrayInsertion[pos - 1] > curr:
        arrayInsertion[pos] = arrayInsertion[pos - 1]
        pos -= 1
    arrayInsertion[pos] = curr

正确产生:

  

[5, 5, 5, 6, 6, 8, 9]

为了将来使用,请考虑将其打包成函数def insertion_sort(a)

答案 1 :(得分:0)

def insert_sort(list_input):
    for unsorted_id in range(len(list_input)):
        element = list_input[unsorted_id]
        sorted_id = unsorted_id - 1
        while sorted_id >= 0 and element > list_input[sorted_id]:
            list_input[sorted_id + 1] = list_input[sorted_id]
            sorted_id -= 1
        list_input[sorted_id + 1] = element
    return list_input

答案 2 :(得分:0)

你也可以使用内置的.sort()方法

答案 3 :(得分:0)

curr
  

上面的代码行将依次产生1到6个(1,2,3,4,5,6)

curr*
  

arrayInsertion [i + 1]在上面一行中尝试访问arrayInsertion [7],其中i = 6不存在

所以它会抛出 IndexError:列表索引超出范围