我正在尝试创建一个由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:列表索引超出范围
答案 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:列表索引超出范围