我正在尝试在python中创建一个没有内置函数的插入排序程序。唯一的问题是我的程序只会对列表中的第一项进行排序。我做错了什么?
我的排序
def insertionsort(list1):
for index in range(len(list1)):
value = list1[index]
position = index
while position > 0 and list1[position-1] > value:
list1[position]=list1[position-1]
position = position-1
list1[position] = value
return(list1)
示例输出
列表= [3,1,5,2]
输出= [1,3,5,2]
答案 0 :(得分:1)
修复您的缩进,例如: (返回应该在循环之外)
def insertionsort(list1):
for index in range(len(list1)):
value = list1[index]
position = index
while position > 0 and list1[position-1] > value:
list1[position]=list1[position-1]
position = position-1
list1[position] = value
return(list1)
aList = [3, 1, 5, 2]
aList = insertionsort (aList)
print (aList)
事实上,你可以在任何地方找到它:
https://interactivepython.org/runestone/static/pythonds/SortSearch/TheInsertionSort.html
答案 1 :(得分:1)
首先,在插入排序中,我们假设我们的第一个元素已经排序。 因此,我们开始从第一个元素迭代列表。 其次, 你在这里使用范围功能。 范围(4)将包括从0-3开始的数字,将排除4。 因此,您的代码所需的更正是您需要以下面的方式使用范围函数: 对于范围内的索引(1,len(list1))而不是范围内的索引(len(list1)) 并更正return语句的缩进。仅当for循环完成其任务时,才应出现返回语句,因为一旦遇到返回,函数代码执行将停止。 sort函数总结如下。
strtol
另一个建议是在寻求帮助之前尝试干预你的代码。它避免了你可以自己解决的小问题,并为自己创造一个更好的概念。
干杯.. !!
答案 2 :(得分:0)
试试这段代码:
def insertionSort(alist):
for index in range(1,len(alist)):
currentvalue = alist[index]
position = index
while position>0 and alist[position-1]>currentvalue:
alist[position]=alist[position-1]
position = position-1
alist[position]=currentvalue
alist = [3,1,5,2]
insertionSort(alist)
print(alist)
我希望它有所帮助。