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