【问题标题】:Bubble sort query冒泡排序查询
【发布时间】:2019-07-08 15:52:56
【问题描述】:

我不明白第 2 行发生了什么,“-1, 0, -1”。为什么需要这样做,零代表什么?

我已经运行了代码,当我删除了“-1,0,-1”部分并且它没有对列表进行排序时。我不明白为什么它是代码中如此重要的部分

def bubbleSort(alist):
    for passnum in range(len(alist)-1,0,-1): #line 2
        for i in range(passnum):
            if alist[i]>alist[i+1]:
                temp = alist[i]
                alist[i] = alist[i+1]
                alist[i+1] = temp

alist = [54,26,93,17,77,31,44,55,20]
bubbleSort(alist)
print(alist)

【问题讨论】:

  • 参考documentation for range 以确定其第二个和第三个参数的含义可能会有所帮助。
  • 我做了,但我没有正确理解。
  • 想象 len(alist)=5。它将passnum 设置为 4、3、2 和 1。零被忽略。

标签: python bubble-sort


【解决方案1】:

这与算法无关。 range 有 3 个参数

  • 来自
  • 步骤

在这种情况下,这意味着

  • 从最后一个元素开始(索引=N-1)
  • 继续直到第二个(索引=0)
  • step=-1(后退)

【讨论】:

  • 不是倒数第二个
  • last 元素开始,并在索引 0 处停止 before 元素。
【解决方案2】:

这些是range(start, stop, sep) (https://docs.python.org/3/library/functions.html#func-range) 的参数 在您的情况下,您创建一个以列表长度 -1 (len(alist)-1) 开头的范围,并通过 -1 的步骤计数到 0。

【讨论】:

    【解决方案3】:

    正如 cmets 建议的那样,如果您在文档中搜索了 range,您可能已经解决了问题。您的线路:

    range(len(alist)-1,0,-1)
    

    表示范围从列表的 end 开始(即长度,负 1,因为列表是 0 indexed),并在 1(一在 0 之前),步长为 -1(向后)。

    【讨论】:

      猜你喜欢
      • 2013-10-09
      • 2015-09-12
      • 1970-01-01
      • 2014-03-26
      • 2015-03-06
      • 2018-04-18
      • 2018-11-13
      • 2011-08-04
      • 2016-10-15
      相关资源
      最近更新 更多