55 lines
1.6 KiB
Python
55 lines
1.6 KiB
Python
def bubble_sort(arr):
|
|
"""
|
|
冒泡排序算法
|
|
参数:
|
|
arr: 待排序的列表
|
|
返回:
|
|
排序后的列表
|
|
"""
|
|
n = len(arr)
|
|
# 遍历所有数组元素
|
|
for i in range(n):
|
|
# 最后i个元素已经排好序
|
|
for j in range(0, n - i - 1):
|
|
# 如果当前元素大于下一个元素,则交换它们
|
|
if arr[j] > arr[j + 1]:
|
|
arr[j], arr[j + 1] = arr[j + 1], arr[j]
|
|
return arr
|
|
|
|
|
|
def test_bubble_sort():
|
|
"""测试冒泡排序算法"""
|
|
test_cases = [
|
|
([], []),
|
|
([1], [1]),
|
|
([1, 2, 3], [1, 2, 3]),
|
|
([3, 2, 1], [1, 2, 3]),
|
|
([64, 34, 25, 12, 22, 11, 90], [11, 12, 22, 25, 34, 64, 90]),
|
|
([5, 1, 4, 2, 8], [1, 2, 4, 5, 8]),
|
|
([-5, -1, -4, -2, -8], [-8, -5, -4, -2, -1]),
|
|
([0, 0, 0, 0], [0, 0, 0, 0]),
|
|
([3.2, 1.5, 4.8, 2.1], [1.5, 2.1, 3.2, 4.8]),
|
|
]
|
|
|
|
all_passed = True
|
|
for i, (input_arr, expected) in enumerate(test_cases):
|
|
# 复制输入数组,避免修改原数组影响后续测试
|
|
arr_copy = input_arr.copy()
|
|
result = bubble_sort(arr_copy)
|
|
if result == expected:
|
|
print(f"测试用例 {i + 1} 通过: {input_arr} -> {result}")
|
|
else:
|
|
print(f"测试用例 {i + 1} 失败: {input_arr} -> {result}, 期望: {expected}")
|
|
all_passed = False
|
|
|
|
if all_passed:
|
|
print("所有测试用例通过!")
|
|
else:
|
|
print("部分测试用例失败!")
|
|
|
|
return all_passed
|
|
|
|
|
|
if __name__ == "__main__":
|
|
# 运行测试
|
|
test_bubble_sort() |