繁体   English   中英

Python中的排序算法

Sorting algorithm in Python

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

目前我在从视频中学习时发现了这段代码。 然而,代码有一个被指出的缺陷,但我无法理解部分算法以及为什么该缺陷是一个“缺陷”。

i = len(numList) - 1

while i > 1:
    j = 0

    while j < i:

        # If the value on the left is bigger switch values
        if numList[j] > numList[j+1]:
            temp = numList[j]
            numList[j] = numList[j + 1]
            numList[j + 1] = temp
        else:
            print()

        j += 1

    i -= 1

for k in numList:
    print(k, end=", ")
print()

该代码应该从数字列表中订购数字,但是我无法理解其中的两件事:

一个是“为什么从“i”中减去 1?

i = len(numList) - 1

第二,当算法的最后一个数字为“1”时,算法将无法正确排序数字。 例如,“4, 2, 6, 3, 1” 的列表将被排序为“2, 1, 3, 4, 6”,而不是正确的“1, 2, 3, 4, 6”。 评论中的人指出了这样做的原因是它应该是“while i > 0”或“while i >= 1”而不是“while i > 1”。

while i > 1:

但是我无法理解为什么会这样。

2 个回复

“为什么从“i”中减去 1?

因为 collections 是零索引的。 您有 N 个元素,但最后一个可索引值始终是N-1

j < i并且您访问numList[j+1]时,当j处于其最大值时, j == i-1并且i处于其最大值len(numList) - 1 ,然后您访问numList[(i-1)+1] == numList[i] == numList[len(numList) - 1] ,这是最后一个可用的元素。

两个和最让我头疼的一个

while i > 0是正确的,因为在第一次迭代中, i == 1j == 0 ,并且当numList[j] > numList[j+1]时交换j+1 == 1j == 0索引,所以因此 2(索引 1)和 1(索引 0)将被翻转,你从2,1,3,4,6得到1,2,3,4,6

该算法通过切换邻居直到最大“冒泡”,将前 i+1 个数字中的最大值带到前面(所以第 i+1 个位置)。 在第一次迭代中,i = len(numList) - 1,因此整个 numList 的最大值(索引从 0 开始,到 len(numList) - 1 结束)被带到前面。 这是最大值,应该是最后一个。 现在您只需要担心第一个 i - 1 值,因此 i 减一。 因为 i > 1 忘记将第一个元素放在前面(即第二个位置),所以您的示例中的 2 和 1 排序不正确,因为它们需要切换。 因此,您需要 i = 1 迭代步骤。

有一个很棒的网站,它有助于排序算法的可视化。 https://visualgo.net/en/sorting?slide=1 您的算法称为冒泡排序。

1 python中的排序算法帮助

我一直在研究一个程序,该程序将从两个文件中获取信息,然后将信息按排序顺序写到单个文件中。 所以我所做的就是将文件的每一行作为元素存储在列表中。 我创建了另一个函数,该函数将每个元素拆分为2d数组,在其中我可以轻松访问名称变量。 从那里,我想创建一个嵌套的for循环,对其进行迭代,以检查 ...

2 理解Python中的合并和排序算法

所以我试图在python中理解这个简单的合并和排序算法。 这是代码: 我得到它正在尝试做的事情,并且我理解合并函数中的所有代码并且对sort函数有基本的了解。 我不明白的是sort函数的“else”部分是如何工作的。 它似乎保持递归调用sort函数,为左右变量分配越来越小的拆分 ...

3 Python中快速排序算法的解释

我正在关注快速排序算法课程的代码行,其中包含以下代码行: 如果枢轴设置在array[0] ,我会成功运行代码,但是当我更改为其他数字时失败,例如 2,3。 错误消息是list index out of range 。 现在我很困惑,如果列表中有 5 个实例,它怎么会超出范围? 如果我将枢轴更改 ...

4 Python代码中的Java排序算法

我一直在尝试将此Python代码转换为Processing / Java。 我不明白。 这是艾伦·祖科尼(Alan Zucconi)在他的网站上的代码: 难以置信的颜色排序任务 。 这是我到目前为止的内容: 我知道HSB和HSV色彩系统会有一些问题,但是我会弄清楚的。 ...

5 Python中的拓扑排序算法(DFS)实现

我是 python 和算法的新手。 我一直在尝试实现拓扑排序算法一段时间,但似乎无法创建一个有效的结构。 我制作的函数在 adj 列表中表示的图形上运行。 当我有一个 DFS 时,会自上而下地发现节点,并且已经访问过且未再次处理的节点: 当我尝试构建拓扑排序算法时,我创建了一个新的 function ...

6 Python 中的列表排序算法不运行

我正在制作一个名为“dumbstuff”的模块,只是作为一种爱好,似乎无法识别问题。function 设置为接收一个列表和一个运算符,以升序或降序对列表进行排序。 当我运行 function 时,出现一个空白屏幕,我已经使用了一段时间,无法弄清楚出了什么问题。 这是“dumbstuff”模块中的排序 ...

9 Python 合并排序算法

嗨,我正在尝试制作一个合并排序算法以获得乐趣,并且不想只是从互联网上复制代码。 这就是为什么我没有提到另一个人的 Stack Overflow 线程。 因此,除非线程有相同的问题,否则请不要指导我。 我正在使用 2 个函数,合并和合并排序。 合并排序是递归的,我打算将一个列表分成两半,然后对每一半进 ...

10 选择排序算法Python

致力于使用Python实现此算法。 我以为我的逻辑还可以,但是显然不像Python那样抱怨。 while循环导致问题。 如果我删除它,它可以按预期工作,但显然不会对整个列表进行排序。 我的思考过程-&gt;使用线性搜索找到最小的数字-&gt;将新数字追加到列表中-&gt;从当前列表中删除 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM