Python算法之排序

一、算法和数据结构的关系

        算法是为了解决实际问题而设计的,数据结构是算法需要处理问题的载体,高效的程序需要在数据结构的基础上设计和选择算法        

二、排序算法的稳定性

什么是算法的稳定性,考虑的问题是什么?

算法的稳定性

上面的案例中: 第一种可能中:绿色的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、冒泡算法是稳定性算法吗?
遍历一遍发现没有任何元素发生了位置交换,终止排序
算法稳定性 : 稳定算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值