Python 无内置函数的插入排序

Python 无内置函数的插入排序,python,function,sorting,insertion,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

我试图用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]

修复缩进,如下所示: (回路应在回路外)

事实上,你可以在任何地方找到:


试试这段代码:

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)

我希望它能有所帮助。

首先,在插入排序中,我们假设第一个元素已排序。 因此,我们从第一个元素开始在列表中迭代。 其次 你在这里使用的是范围函数。 范围(4)包括从0-3开始的数字,不包括4。 因此,您的代码需要更正的是,您需要以以下方式使用范围函数: 用于范围(1,len(list1))中的索引,而不是范围(len(list1))中的索引 并更正return语句的缩进。只有当for循环完成其任务时,才会出现return语句,因为一旦遇到return,函数代码执行就会停止。 排序函数总结如下

def insertionsort(list1):
     for index in range(1,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)
另一个建议是在请求帮助之前试着运行一下你的代码。这样可以避免一些你可以自己解决的小问题,为自己创造一个更好的概念


干杯

插入排序示例几乎可以在任何Python教科书中找到(例如,在Liang中)。问这样的问题真是太遗憾了。如果我没记错的话,这个问题不是一个小时前问的……另外,你可以删除
返回值,因为这是就地排序。对。但是,它将与链接中的内容完全相同(除了var名称)…这一点并不丢脸;)你引用了消息来源。
def insertionsort(list1):
     for index in range(1,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)