【问题标题】:Using Bubble Sort使用冒泡排序
【发布时间】:2019-10-04 00:19:10
【问题描述】:

我想创建一个使用冒泡排序技术对数组进行排序的程序,但只发生第一次迭代。我需要帮助了解为什么会发生这种情况。

a=[10,4,5,2,0,6]
def srt(element):
    element1=element[:]
    element2=element[:]
    idx=1
    for x in element:
        for y in element2[idx:]:
             if x>y:
                element1[idx]=x
                element1[idx-1]=y
                print(element1)
                idx+=1
             else:
                pass 

我想显示排序的所有步骤

【问题讨论】:

  • 我们可以看看你传递给函数的内容吗?
  • 您确定第一次迭代正在发生吗?您在此处编写的代码仅“定义”该函数,您永远不会调用它。
  • 顺便说一句,你被否决的部分原因是你的问题标题没有描述你提出的问题。
  • x=srt(a) 在这里
  • 你贴的代码不是冒泡排序——网上有几千个例子;我们希望您在此处发布之前进行相关研究。

标签: python bubble-sort


【解决方案1】:

您的代码在语义上是错误的。你不是在比较相邻的元素。

你的代码...

for x in element:
            for y in element2[idx:]:
                 if x>y:

将列表的第一个元素与列表中从 idx 开始的所有其他元素进行比较。

冒泡排序的工作原理是比较相邻元素并在每次遍历时将最大/最小元素“冒泡”到列表末尾。

interactivepython.org 上的这段代码通过从列表的开头迭代到 (len of list) - (number of iterations) 来工作,因此在第一次通过时,它将最大的元素冒泡到列表的末尾。在第二次通过时,它将第二大元素冒泡到列表中倒数第二个位置......依此类推。

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

https://interactivepython.org/runestone/static/pythonds/SortSearch/TheBubbleSort.html

【讨论】:

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