编程语言
首页 > 编程语言> > python – 冒泡排序已排序列表

python – 冒泡排序已排序列表

作者:互联网

如果传递已经订购的列表(或者已经通过冒泡排序中途订购),我想停止运行冒泡排序功能

我已将冒泡排序功能定义为

def swap(values,i,j):
    values[i],values[j]=values[j],values[i]

def bubble(values):
    for i in range (len(values)-1):
        if values[i]>values[i+1]:
            swap(values,i,i+1)

def bubble_sort(values):
    count = 0
    for i in range(len(values)-1):
        count += 1
        bubble(values)
    return count

在这里,我计算我调用bubble函数的次数,以查看执行交换的次数.我想改变代码,以便如果给出一个已经排序的列表,bubble_sort()函数将停止调用bubble()函数.

我知道我将不得不在bubble函数中使用一个布尔值,如果有任何值被交换,则返回但是我不确定如何实际实现它.

解决方法:

正如Jorge在回答中所示,但是没有解释(如关闭喷射)在泡泡中放置一个默认为True或False的布尔变量,无论你选择什么,如果你进行交换并将结果返回到最后,则将其值更改为oposite,如果从bubble获得的值是您的默认值,则表示您的列表是否已订购,否则您必须继续调用该函数.然后你可以将main函数改为像这样的while循环

def bubble(values):
    "return true if a swap was made, false otherwise" 
    flag = False
    for i in range(len(values)-1):
        if values[i]>values[i+1]:
            swap(values,i,i+1)
            flag = True
    return flag

def bubble_sort(values):
    count = 0 
    while bubble(values): # while there is a swap...
        count += 1
    return count 

测试

>>> test=[1,9,4,7,2,8,10,5,6,3]
>>> bubble_sort(test)
7
>>> test
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> bubble_sort(test)
0
>>> test
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> 

标签:python,sorting,bubble-sort
来源: https://codeday.me/bug/20190706/1396732.html