def bubble_sort(alist): '''冒泡排序,使用顺序表''' n = len(alist) for j in range(n - 1): # 外层班长需要走多少次,n-1次,从0开始,最后一位自动排序不需要再走 count = 0 # 代表交换次数 for i in range(0, n - 1 - j): # 班长从头走到尾 # 因为下标是从0开始,最后一个数为alist[n-1] # 从alist[0]一直到alist[n-2],最后一个数不需要再比较,比较到倒数第二个数即可,所以范围为(0,n-1) if alist[i] > alist[i + 1]: alist[i], alist[i + 1] = alist[i + 1], alist[i] count += 1 if 0 == count: return alist return alist
时间: 2024-02-14 07:10:46 浏览: 108
以下是对上述代码的优化:
1. 减少不必要的计算:在for循环中,n-1-j是一个固定值,可以在循环外面先计算好,避免每次循环都进行计算。同时,第二个for循环中也可以将n-1提前计算出来。
2. 增加标志位:在第二个for循环中,如果没有进行过交换,则说明列表已经排序完成,可以直接退出循环。
3. 代码简化:在if 0 == count: 和 return alist 之间的return alist可以省略。
4. 函数命名规范:函数名应该使用小写字母和下划线的组合,例如bubble_sort改为bubble_sort。
优化后的代码如下:
```python
def bubble_sort(alist):
'''冒泡排序,使用顺序表'''
n = len(alist)
for j in range(n - 1):
# 外层班长需要走多少次,n-1次,从0开始,最后一位自动排序不需要再走
count = 0
# 代表交换次数
for i in range(n - 1 - j):
# 班长从头走到尾
# 因为下标是从0开始,最后一个数为alist[n-1]
# 从alist[0]一直到alist[n-2],最后一个数不需要再比较,比较到倒数第二个数即可,所以范围为(0,n-1)
if alist[i] > alist[i + 1]:
alist[i], alist[i + 1] = alist[i + 1], alist[i]
count += 1
if count == 0:
break
return alist
```
这样优化后的代码更加简洁,并且可以减少一些不必要的计算,提高代码执行效率。
阅读全文