基本思想

依次比较两个相邻元素nums[i]nums[i-1],将较大/小的元素交换到前面去,就像泡泡上浮的过程一样;比较完后进行下一轮比较。

具体实现

  1. from typing import List
  2. def bubble_sort(nums: List):
  3. length = len(nums)
  4. for i in range(length):
  5. for j in range(1, length-i):
  6. if nums[j] < nums[j-1]:
  7. nums[j], nums[j-1] = nums[j-1], nums[j]

性能分析

平均时间复杂度:

  • 求数组长度length冒泡排序 - 图1
  • 两个循环:冒泡排序 - 图2
  • 总和:冒泡排序 - 图3

空间复杂度:

  • 冒泡排序 - 图4

优化

设置一个符号位flag,表明是否发生交换,若未发生交换说明数组已经有序。

  1. def bubble_sort(nums: List):
  2. flag = 0
  3. length = len(nums)
  4. for i in range(length):
  5. for j in range(1, length-i):
  6. if nums[j] < nums[j-1]:
  7. nums[j], nums[j-1] = nums[j-1], nums[j]
  8. flag = 1
  9. if flag == 0:
  10. break