首页 > 解决方案 > 冒泡排序算法产生预期结果

问题描述

如果我不能很好地理解这个话题,请原谅我。我正在实现一个基本的(在 youtube 上找到)冒泡排序算法。与示例“list = [3, 4, 5, 9, 0, 2, 1]”相反,从我学到的角度来看,我决定尝试实现不同的数字并获得一个有组织但没有“排序”的列表。我对输出并不不满,我只是好奇其他人对我的不同结果有什么看法,并可能对此有所了解。

这是在带有 Windows 计算机的 Visual-studio 上使用 python。

原始代码是:

  def bubblesort(list):
      print("bubblesort")

      for k in range(0,len(list)-1, 1):
          for i in range(0,len(list)-1,1):
              if list [i] > list[i + 1]:
                  temp = list[i]
                  list[i] = list[i + 1]
                  list[i + 1] = temp
  list = [43, 7, 30, 234, 35, 77, 79, 45, 34, 21, 26]
  print(list)
  bubblesort(list)
  print(list)

  outputs:
  [43, 7, 30, 234, 35, 77, 79, 45, 34, 21, 26]
  bubblesort
  [7, 21, 26, 30, 34, 35, 43, 45, 77, 79, 234]

这就是我改变探索结果的方式:

 def bubblesort():
    for i in range(0, len(list)-1, 1):
            if list[i] > list[i + 1]:
                list[i] = list[i + 1]



list = [10,110,13,00,0,110]
list = [10,00,11,00,0,1111]
list = [10,101,00,10,0,110]

print(list)
print(list)
print(list)

对我的数字的随机性感到抱歉,我弄乱了一些,看看它是否会排序相同(确实如此,完全相同)。它将某些数字排成列,这很酷,但我希望它们按照上面的值顺序排序,甚至包括我之后添加的不同数字。所以基本上我期待这样的事情:

[0,00,10,13,110,110]
[0,00,00,10,11,1111]
[0,00,10,10,101,110]

实际输出为:

[10, 101, 0, 10, 0, 110]
[10, 101, 0, 10, 0, 110]
[10, 101, 0, 10, 0, 110]

标签: pythonpython-3.x

解决方案


通过做

list = [10,110,13,00,0,110]
list = [10,00,11,00,0,1111]
list = [10,101,00,10,0,110]

list在每一行中分配新内容,因此此代码实际上等效于

list = [10,101,00,10,0,110]

我会将代码更改为以下形式:

def bubblesort(lst):
    for i in range(len(lst)-1):
        if lst[i] > lst[i + 1]:
            lst[i] = lst[i + 1]

lst1 = [10,110,13,00,0,110]
lst2 = [10,00,11,00,0,1111]
lst3 = [10,101,00,10,0,110]

bubblesort(lst1)
bubblesort(lst2)
bubblesort(lst3)

print(lst1) #output: [10, 13, 0, 0, 0, 110]
print(lst2) #output: [0, 0, 0, 0, 0, 1111]
print(lst3) #output: [10, 0, 0, 0, 0, 110]

请注意,我添加了lst参数 for,bubblesort因此它不仅可以用于具有固定名称的一个变量。请避免list在 Python 语言中用作变量名,因为已经存在内置list函数。

请注意,该bubblesort功能不是排序的正确实现,尽管我很困惑您到底想要做什么,但我将其保留原样。


推荐阅读