冒泡排序已排序列表

时间:2016-02-07 23:45:53

标签: python sorting bubble-sort

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

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

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函数中使用一个布尔值,如果有任何值被交换,则返回,但我不确定如何实际实现它。

2 个答案:

答案 0 :(得分:1)

正如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]
>>> 

答案 1 :(得分:0)

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

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

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