我的代码几乎可以正常工作,除了一个小错误,无论值如何,它将第二个元素放在开头。 1,6,2,9,3,8,4,7,5,0变成6,0,1,2,3,4,5,7,8,9
我曾尝试过更改FOR循环中的数字,但除此之外,确实无法发现问题所在
def InsertionSort(array):
for i in range(len(array)):
for j in range(len(array)):
if array[i] <= array[j+1]:
new = array.pop(i)
array.insert(j+1,new)
break
elif array[i] > array[j+1]:
continue
print (array)
答案 0 :(得分:0)
每次修改要遍历的集合时,都会得到与预期不同的行为。当您从集合中删除项目时,尤其如此,因为它会与当前索引混淆。
这里是一个示例,它简单地交换元素的顺序(并沿途打印调试信息,以便您可以准确地看到正在发生的事情):
def insertionSort(my_list):
# for every element in our array
for index in range(1, len(my_list)):
current = my_list[index]
position = index
while position > 0 and my_list[position-1] > current:
print("Swapped {} for {}".format(my_list[position], my_list[position-1]))
my_list[position] = my_list[position-1]
print(my_list)
position -= 1
my_list[position] = current
return my_list
my_list = [8,2,1,3,5,4]
print(insertionSort(my_list))
答案 1 :(得分:0)
存在的问题是,您将第二个元素的位置与第一个元素切换,但后来不再进行比较。
这是一个与您最接近的实现,只需稍作更改即可处理所有条目
ar =[1,6,2,9,3,8,4,7,5,0]
def InsertionSort(array):
for i in range(len(array)):
val = array[i]
while( i > 0 and array[i-1] > val):
array[i] = array[i-1]
i = i - 1
array[i] = val
print (array)
InsertionSort(ar)