【问题标题】:how can i print all the passes in the bubble sort我如何打印冒泡排序中的所有通行证
【发布时间】:2020-05-15 15:40:59
【问题描述】:

有什么方法可以显示冒泡排序的所有通过,如下图所示?

这是我的冒泡排序代码;

def bubble_sort(list_a):
    exchanges = True
    i = len(list_a)-1
while i > 0 and exchanges:
    exchanges = False
    for j in range(i):
        if list_a[j]>list_a[j+1]:
            exchanges = True
            list_a[j], list_a[j+1] = list_a[j+1], list_a[j]
    i -= 1


list_a = [70, 60, 50, 40, 30, 20, 10]
bubble_sort(list_a)
print(list_a)

Example output

【问题讨论】:

  • 您可以从编写一个进行冒泡排序的 python 程序开始。
  • 我确实有一个冒泡排序程序,但它只是给出了排列好的列表,它没有显示通行证。
  • 那么请尝试修改此程序并将其包含在您的问题中。
  • 1.设置您的阵列。 2. 做一次冒泡排序。 3. 打印数组的当前状态。 4.如果数组还没有排序,返回#2。
  • 我在帖子里加了代码

标签: python python-3.x algorithm sorting


【解决方案1】:

您可以使用以下代码在每次交换时打印数组:

def bubble_sort(list_a):
    exchanges = True
    i = len(list_a)-1
    while i > 0 and exchanges:
        exchanges = False
        for j in range(i):
            if list_a[j]>list_a[j+1]:
                exchanges = True
                list_a[j], list_a[j+1] = list_a[j+1], list_a[j]
                #You print the contents of the array after every swap
                print("After pass " + str(i) + ", inner loop "+ str(j) + ": " + str(list_a)) 
        i -= 1

#The following code is only to test the Bubble Sort, so nothing has to be changed here    
list_a = [70, 60, 50, 40, 30, 20, 10]
bubble_sort(list_a)
print(list_a)

或者您可以使用以下代码在每次传递时打印数组:

def bubble_sort(list_a):
    exchanges = True
    i = len(list_a)-1
    while i > 0 and exchanges:
        exchanges = False
        for j in range(i):
            if list_a[j]>list_a[j+1]:
                exchanges = True
                list_a[j], list_a[j+1] = list_a[j+1], list_a[j]
        #You print the contents of the array after every pass
        print("After pass " + str(i) + ": " + str(list_a)) 
        i -= 1

#The following code is only to test the Bubble Sort, so nothing has to be changed here    
list_a = [70, 60, 50, 40, 30, 20, 10]
bubble_sort(list_a)
print(list_a)

如您所见,不同之处在于添加打印语句的位置。

您还可以查看一个更简洁的冒泡排序实现,它可以使整个算法更易于理解:

def bubbleSort(arr): 
    n = len(arr) 
    for i in range(n-1): 
        for j in range(0, n-i-1): 
            if arr[j] > arr[j+1] : 
                arr[j], arr[j+1] = arr[j+1], arr[j]
                #I have included this line so it prints the array at every swap
                print("After pass " + str(i) + ", inner loop "+ str(j) + ": " + str(arr)) 

【讨论】:

  • 代码创造奇迹!非常感谢你,虽然我还有一个问题,我如何显示每次通过和交换的数量,例如输出应该看起来像“通过 1 后,内循环 1:[60,70,50,40,30,20 , 10] 我猜第一遍会有 6 个循环,第二遍会有 5 个循环,依此类推,但我该如何证明呢?我必须一遍又一遍地输入 print 吗?
  • 我得到这个错误:|| TypeError:只能将 str(不是“int”)连接到 str ||我在两行中得到了这个,第一行打印“print(”后通过“+ i +”,内循环“+ j +”:“+ arr)”,第二次当我调用函数时
  • 我想你是 Python 新手。您不会得到它两次,但只有在调用该函数时才会得到它,该函数从冒泡排序函数接收错误。这称为堆栈跟踪。无论如何,我正在更新答案以反映该问题。很抱歉,我有一段时间没有接触 Python,有时会忘记它的缺点。
  • 实际上是的,事实上我是 python 和编码的新手!嗯,我把变量作为 str() 所以它起作用了。现在最后一件事,我得到的输出开始于“在第 6 遍之后,内部循环 0:”我可以以某种方式从第 1 遍开始到第 6 遍吗?像相反的方式和内部循环一样,我如何从 1 而不是 0 开始它。抱歉,有任何问题,感谢您的帮助。
  • 用“str(i+1)”代替“str(i)”。实际使循环从 1 开始是不可取的,因为数组从 0 开始。我的建议是习惯从 0 开始的数组和循环,因为 Python 不是你会在其中看到的唯一语言,到目前为止,最终,你会开始欣赏这一点(相信我)。
猜你喜欢
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-28
  • 2013-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多