Python冒泡算法及原理
冒泡排序(Bubble Sort)是一种简单的排序算法,它通过重复地交换相邻元素的位置来进行排序。冒泡排序的原理如下:
1.从列表的第一个元素开始,比较相邻的两个元素,如果顺序不符合要求(比如递增排序时前面的元素大于后面的元素),则交换它们的位置。
2.继续比较相邻的元素,直到最后一个元素。经过第一轮遍历后,在列表中最大的元素会被排在最后一位。
3.重复执行上述步骤,每次遍历都会将当前范围内最大的元素移动到正确的位置。
4.每一轮遍历完成后,未排序部分的最大值会沉底,逐渐形成有序序列。
以下是冒泡排序算法的Python实现:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
# 标记是否发生过交换
swapped = False
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
# 交换元素
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped = True
# 如果本轮没有发生交换,则表示列表已经有序,提前结束
if not swapped:
break
# 测试
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("排序后的数组:", arr)
这段代码演示了如何使用冒泡排序对一个整数数组进行排序。在每次遍历中,如果没有发生任何元素交换,算法会提前结束,因为列表已经是有序的。冒泡排序虽然简单,但对于大型数据集并不高效,因为其时间复杂度为。
当冒泡排序算法在内部循环中没有发生任何交换时,可以利用这一特性提前终止外部循环,因为这表示列表已经是有序的,不需要继续排序。
以下是优化后的冒泡排序算法代码示例,包含了这个优化:
def bubble_sort(arr):
n = len(arr)
for i in range(n):
# 标记是否发生过交换
swapped = False
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
# 交换元素
arr[j], arr[j+1] = arr[j+1], arr[j]
swapped = True
# 如果本轮没有发生交换,则表示列表已经有序,提前结束
if not swapped:
break
# 测试
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("排序后的数组:", arr)
这种优化能够减少对于已经有序列表的不必要比较和交换操作,提高了冒泡排序的效率。