前言:以下排序均以升序为例
一、排序算法
- 概念
排序算法(英语:Sorting algorithm)是⼀种能将⼀串数据依照特定顺序进⾏ 排列的⼀种算法。 - 稳定性
稳定排序算法会让原本有相等键值的纪录维持相对次序
(4, 1) (3, 1) (3, 7)(5, 6)
(3, 1) (3, 7) (4, 1) (5, 6) (维持次序)
(3, 7) (3, 1) (4, 1) (5, 6) (次序被改变)
二、冒泡排序
- 基本流程
- 游标 i从第一个元素开始,每遍历一次,游标i与其后面的元素比较一次大小
- 第一次寻找最大值(外层循环遍历一次),游标i需遍历到倒数第二个元素(倒数第一个元素不遍历)
- 第二次寻找最大值(外层循环j遍历第二次),游标需遍历到倒数第三个元素(倒数第一个元素已经是最大值,倒数第二个元素不遍历)
- 重复寻找最大值,直到倒数第二个最大值寻找完(最后一个最大值不用比较)
总结 :每次从序列中一步一步冒出一个最大值
- 注:
(1)外层循环j和内层循环i的关系
寻找最大值的次数(j) 游标需遍历到的元素(i)
j = 0 i = len(sort_list) - 2(倒数第二个元素)
j = 1 i = len(sort_list) - 3 = len(sort_list) - 2 -1 (倒数第三个元素)
j = 3 i = len(sort_list) - 4 = len(sort_list) - 2 -2 (倒数第三四元素)
……
(2)最优时间复杂度: 序列本身是有序 O(n)
(3)最坏时间复杂度: 序列本身是倒序的 O(n2)
(4)稳定性:稳定(对相同数据不进行任何操作)
- python实现
'''冒泡排序'''
def bubble_sort(sort_list):
for j in range((len(sort_list)-1): #每次选取最大值时需要比较元素个数
count = 0 # 记录交换值得次数
for i in range(len(sort_list)-1-j): # 游标需遍历的元素个数(range函数取不到最后一个值)
if sort_list[j] > sort_list[j+1]:
sort_list[j],sort_list[j+1] = sort_list[j+1],sort_list[j]
count += 1
if count == 0: # 列表本身为有序列表
break
return sort_list
if __name__ == "__main__":
sort_list = [54,