【问题标题】:Insertion Sort Recursion not picking up last element [5,4,3,2,1,0] After sortin [1,2,3,4,5,0] Where last element not sorted插入排序递归未拾取最后一个元素[5,4,3,2,1,0]排序后[1,2,3,4,5,0]最后一个元素未排序
【发布时间】:2021-08-22 08:10:55
【问题描述】:

我陷入了我自己编写递归插入排序的问题的中间。该程序运行良好,但没有选择要排序的最后一个元素 [5,4,3,2,1,0]。执行后:[1,2,3,4,5,0]

from array import *
mylist = array('i',[5,4,3,2,1,0])

def insertionsort(mylist):
    if len(mylist)>1:
        mylist = mylist[:len(mylist)-1]
        insertionsort(mylist)
        i = len(mylist)-1
        key = mylist[i]
        j = i-1
        
        while j>=0 and key<mylist[j]:
            mylist[j+1] = mylist[j]
            j = j-1
        mylist[j+1] = key

insertionsort(mylist)
print(mylist)

【问题讨论】:

  • 正如 SrishtiAhuja 所说,在每次迭代中,您都会通过删除最后一个元素:mylist = mylist[:len(mylist)-1] 来不必要地缩短列表,因此它永远不会被排序。 (无论如何,在 Python 中仅供参考,您无需继续引用 len(mylist),您可以使用切片符号 ll[:-1]

标签: python insertion-sort recursive-datastructures


【解决方案1】:

这应该可行

from array import * 

mylist=array('i',[5,4,3,2,1,0])

def insertionsort(mylist, l): 
    if l>1: 
        insertionsort(mylist, l-1) 
    i=l-1
    key=mylist[i] 
    j=i-1

    while j>=0 and key<mylist[j]:
        mylist[j+1]=mylist[j]
        j=j-1
    mylist[j+1]=key

insertionsort(mylist, len(mylist)) 
print(mylist)

【讨论】:

  • 感谢您的帮助,但您能帮我解决一下我的程序出了什么问题吗?我们将非常感谢您的帮助。
  • mylist=mylist[:len(mylist)-1] 此语句正在修改您的列表。尝试在代码中的每次递归调用后打印列表的状态,您就会明白哪里出错了
【解决方案2】:

试试这个:

mylist = [5,4,3,2,1,0]

def insertionsort(mylist,n):
    if n<=1:
        return
    insertionsort(mylist,n-1)
    key = mylist[n-1]
    j = n-2
     
    while (j>=0 and key < mylist[j]):
        mylist[j+1] = mylist[j]
        j = j-1
 
    mylist[j+1]=key


insertionsort(mylist, len(mylist))
print(mylist)

输出:

[0, 1, 2, 3, 4, 5]

【讨论】:

  • 是的,您尝试了您的算法,但想知道我的程序有什么问题。我们将非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2016-12-19
相关资源
最近更新 更多