数据结构之Python十大排序之冒泡排序
使用场景:
1,空间复杂度 越低越好、n值较大:
堆排序 O(nlog2n) O(1)
2,无空间复杂度要求、n值较大:
桶排序 O(n+k) O(n+k)
经典排序算法图解:
经典排序算法的复杂度:
大类一(比较排序法):
1、冒泡排序(Bubble Sort)【前后比较-交换】
python代码实现:
1 d0 = [2, 15, 5, 9, 7, 6, 4, 12, 5, 4, 2, 64, 5, 6, 4, 2, 3, 54, 45, 4, 44]
2 d0_out = [2, 2, 2, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 7, 9, 12, 15, 44, 45, 54, 64] # 正确排序
3
4 while 1:
5 state = 0 # 假设本次循环没有改变
6 for i in range(len(d0) - 1):
7 if d0[i] > d0[i + 1]:
8 d0[i], d0[i + 1] = d0[i + 1], d0[i]
9 state = 1 # 有数值交换,那么状态值置1
10 if not state: # 如果没有数值交换,那么就跳出
11 break
12
13 print(d0)
14 print(d0_out)
优化
def bubble_sort(nums):
for i in range(len(nums) - 1): # 这个循环负责设置冒泡排序进行的次数
for j in range(len(nums) - i - 1): # j为列表下标
if nums[j] > nums[j + 1]:
nums[j], nums[j + 1] = nums[j + 1], nums[j]
return nums
print(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))
# 输出:[8, 12, 19, 22, 32, 33, 45, 97]