【问题标题】:Insertion Sort With No Built In Functions没有内置函数的插入排序
【发布时间】:2017-06-14 22:57:57
【问题描述】:

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

【问题讨论】:

  • 几乎所有 Python 教科书中都可以找到插入排序示例(例如,在 Liang 中)。在 SO 上问这样的问题是一种耻辱。
  • 如果我没记错的话,这个问题是在一小时前被问到的......

标签: python function sorting insertion


【解决方案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

【讨论】:

  • 另外,您可以删除return,因为这是就地排序。
  • 对。但随后它将与链接中的完全相同(除了 var 名称)...
  • 没有羞耻感 ;) 你引用了来源。
【解决方案2】:

首先在插入排序中,我们假设我们的第一个元素已排序。 因此,我们从第一个元素开始迭代列表。 其次, 您在这里使用范围功能。 range(4) 将包括从 0-3 开始的数字,但不包括 4。 因此,您的代码需要的更正是您需要以下列方式使用范围函数: 范围内的索引(1,len(list1))而不是范围内的索引(len(list1)) 并更正您的 return 语句的缩进。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)

另一个建议是在寻求帮助之前先试运行你的代码。它可以避免你可以自己解决的小问题,并为自己创造一个更好的概念。

干杯..!!

【讨论】:

    【解决方案3】:

    试试这段代码:

    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)
    

    希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多