插入排序没有内置功能

时间:2017-01-29 19:08:06

标签: python function sorting insertion

我正在尝试在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]

3 个答案:

答案 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)

我希望它有所帮助。