一、 冒泡排序
1.目的:一堆杂乱无序的数据,使他们从小到大排序。
- 例如: [1,4,3,5,2] 通过冒泡方法排序成:[1,2,3,4,5]
2.冒泡法:比较相邻的两个数,第一个数比第二个数大,就交换他们两个,然后用最大的和下一个相邻的比大小,直到比较最后一个(升序)。
3.代码演示一:
num: List[Union[int, Any]] = [1, 5, 3, 2, 4]
for j in range(len(num)-1,0,-1):
print('j=',j)
for i in range(j):
print('i=',i)
if num[i] > num[i+1]:
num[i], num[i + 1] = num[i + 1], num[i]
print(num)
结果显示如下,为了方便了解步骤,已经逐步打印出来各个结果
代码演示二:
num: List[Union[int, Any]] = [1, 5, 3, 2, 4]
for i in range(1,len(num)-1):
print('i=',i)
for j in range(0, len(num)-i):
print('j=', j)
if num[j] > num[j+1]:
num[j], num[j + 1] = num[j + 1], num[j]
print(num)
运行结果:
4.时间复杂度
- 最优时间复杂度:O(n)
- 最坏时间复杂度:O(n2)
- 稳定性:稳定
二、选择排序
1. 选择排序法:从一组数据中,从最末尾的数据中找最小(大)的数据存到序列的起始位置,再从剩余的末尾找最小(大)的,排到已排序的数据的末尾。
2.动态图演示如下:
3.代码演示
num = [1, 4, 5, 3, 2]
print(len(num))
for i in range(len(num) - 1):
min_index = i
print('min_index=', min_index)
for j in range(i + 1, len(num)):
if num[min_index] > num[j]:
min_index = j
print('找到最小的值交换到前面序列', num[min_index])
if i != min_index:
num[i], num[min_index] = num[min_index], num[i]
print(num)
运行结果
4.时间复杂度
- 最优时间复杂度:O(n2)
- 最坏时间复杂度:O(n2)
- 稳定性:不稳定(考虑升序每次选择最大的情况)