vlambda博客
学习文章列表

数据结构之Python十大排序之冒泡排序

使用场景:

1,空间复杂度 越低越好、n值较大:

  堆排序  O(nlog2n)  O(1)

2,无空间复杂度要求、n值较大:

  桶排序  O(n+k)    O(n+k)

 

 

 

经典排序算法图解:

经典排序算法的复杂度:

数据结构之Python十大排序之冒泡排序

 

大类一(比较排序法):

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]