python冒泡排序列表_python – 冒泡排序已排序列表

本文探讨了如何改进冒泡排序算法,使其在处理已排序列表时能提前终止。通过在`bubble`函数中添加一个布尔标志,记录是否发生过交换,可以在未进行交换的情况下停止排序过程。`bubble_sort`函数使用`while`循环根据`bubble`函数返回的标志决定是否继续执行,从而提高效率。
摘要由CSDN通过智能技术生成

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

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

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]

>>>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值