一、算法和数据结构的关系
算法是为了解决实际问题而设计的,数据结构是算法需要处理问题的载体,高效的程序需要在数据结构的基础上设计和选择算法
二、排序算法的稳定性
什么是算法的稳定性,考虑的问题是什么?
算法的稳定性
上面的案例中: 第一种可能中:绿色的1和前面的1相对次序没有改变,因此该排序算法是稳定的
无序数据具有2个关键字, 先按照关键字1排序, 若关键字1值相同,再按照关键字2排序。
这里的第二种,我们就认为是稳定性的。
排序算法稳定性总结:
1.什么是排序和排序算法?
2.什么是稳定性算法?
3.稳定性算法和不稳定性算法举例
排序算法一:冒泡排序
https://visualgo.net/zh/sorting
冒泡排序的思想是什么
冒泡排序的代码实现
# 冒泡排序初级代码
def bubbleSort(list1):
# 获取列表总长度
n = len(list1)
# 外层循环控制循环总轮数 =》 6个元素,循环5次,7个元素,循环6次,
#n个元素,循环n-1次。
# 为什么要用 n-1,0 而不是 0,n-1,虽然外层是一样的循环次数
# 答案: 主要是为了让内层循环次数直接通过i 进行传递,因为当数字为7个的时候,
# 外层循环是6次,内层循环也是6次。
for i in range(n-1, 0, -1):
#内层循环控制冒泡排序中,两两比较 =》 如果i = 5,循环5次;i=4 循环4次。
for j in range(i):
if list1[j] > list1[j+1]:
# 交换(分组拆包方式)
list1[j], list1[j+1] = list1[j+1], list1[j]
return list1
if __name__ == '__main__':
list1 = [4,1,3,7,4,1,2,3,5,6,7,8,9]
print(bubbleSort(list1))
结果:
初级排序问题:即使数据一开始是顺序排好了,或者内层循环发现已经是顺序的了代码依旧会循环下去,浪费资源
python冒泡排序(优化版本)
优化版本,第一轮发现是排好序了之后,后续就不会继续执行了。
1、冒泡算法时间复杂度
最差时间复杂度 : O(n2)
最优时间复杂度 : O(n)
2、冒泡算法是稳定性算法吗?
遍历一遍发现没有任何元素发生了位置交换,终止排序
算法稳定性 : 稳定算法