如何为冒泡排序计时?求计时实现方案及代码点评
给冒泡排序添加计时功能 + 代码点评
嘿,我来帮你搞定冒泡排序的计时需求,顺便聊聊这段代码的优缺点~
一、实现计时功能
要给排序函数加计时,我们可以用Python的time模块,其中time.perf_counter()是计时短任务的最佳选择,精度比time.time()更高。下面是修改后的完整代码:
import time def bubble_sort(arr): # 把参数名`list`改成`arr`,避免覆盖内置类型 need_next_pass = True k = 1 while k < len(arr) and need_next_pass: need_next_pass = False for i in range(len(arr) - k): if arr[i] > arr[i + 1]: # Python专属的简洁交换方式,不需要临时变量 arr[i], arr[i + 1] = arr[i + 1], arr[i] need_next_pass = True # 测试计时功能 if __name__ == "__main__": # 随便找个测试列表,你也可以换成自己的数据集 test_nums = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5] # 记录排序开始时间 start_time = time.perf_counter() bubble_sort(test_nums) # 记录排序结束时间 end_time = time.perf_counter() # 打印耗时,保留6位小数更直观 print(f"排序完成!耗时: {end_time - start_time:.6f} 秒") print("排序后的结果:", test_nums)
运行这段代码,就能看到排序完成后的精确耗时啦~
二、原冒泡排序代码的点评
优点
- 提前终止优化:
needNextPass这个变量设计得非常巧妙!如果某一轮遍历完全没有发生交换,说明列表已经是有序的了,直接终止循环,避免了后续无意义的遍历,比最基础的冒泡排序效率高不少。 - 缩小遍历范围:用
k变量来逐步缩小每一轮的遍历范围——每一轮冒泡都会把当前最大的元素“沉”到列表末尾,后续遍历不需要再碰这些已经排好的元素,这个细节能有效减少不必要的比较操作。
可以改进的地方
- 参数命名:原代码用
list作为参数名,这会覆盖Python的内置list类型,容易引发潜在的bug,建议改成arr、nums这类更安全的名字。 - 代码风格:Python推荐使用蛇形命名法(比如
need_next_pass而不是needNextPass),更符合PEP8编码规范,团队协作时可读性更高。 - 交换方式:原代码用临时变量
temp交换元素,其实Python支持a, b = b, a这种更简洁的写法,不需要额外变量,代码更清爽。
内容的提问来源于stack exchange,提问作者Tyler Dowsland
相关产品推荐
相关产品推荐

