2017-01-29 100 views
-2

我想在没有内置函数的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]

+1

插入排序示例可以在几乎任何Python文本书中找到(例如,在Liang中)。在SO上提出这样的问题是一种耻辱。 – DyZ

+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

+0

另外,你可以删除'return',因为这样做就地排序。 – schwobaseggl

+0

对。但是,它会完全像在链接(除了var名称)... –

+0

不要羞耻在那;)你引用的来源。 – schwobaseggl

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) 

我希望它能帮助。

+0

这是不正确的...... –

1

首先在插入排序中,我们假设我们的第一个元素是排序的。因此,我们从第一个元素开始在列表中迭代。 其次, 您在此处使用范围函数。 范围(4)将包括从0-3开始的数字,并且将排除4. 因此,您的代码需要的更正是您需要使用以下方式的范围函数: (1,len(list1))中的索引而不是索引在范围内(len(list1)) 并更正您的return语句的缩进。返回语句应仅在for循环完成其任务时存在,因为一旦遇到返回,函数代码执行就会停止。 排序功能总结如下。

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) 

另一个建议是要求help.It之前尝试你的代码的空运行避免了就可以解决你自己的,并为自己创造一个更好的概念小问题。

干杯.. !!