常见的排序算法总结

本文总结了常见的五种排序算法:冒泡排序、选择排序、插入排序、快速排序和堆排序。冒泡排序在最好情况下只需一轮排序;选择排序每次选择最大元素,时间复杂度始终为O(n^2);插入排序适合小规模数据,最好情况时间复杂度为O(n);快速排序平均时间复杂度为O(nlogn),但最坏情况下为O(n^2);堆排序则能在O(nlogn)时间内完成排序,且原地排序空间复杂度低。
摘要由CSDN通过智能技术生成

 

1、冒泡排序

从第一个元素开始,两两比较相邻元素,如果第一个元素比第二个元素大,则交换相邻元素,这样每经过一轮排序,就会有一个元素在最终位置上。

优化:设置一个flag,当在一次遍历中没有元素交换位置,说明列表已经有序。

时间复杂度:最坏:O(n^2), 平均:O(n^2), 最好:O(n)

空间复杂度:O(1)

稳定的排序算法

def bubble_sort(l):
    for i in range(len(l)-1):    # len(l)-1轮排序,把len(l)-1个元素排在相应位置,最后一个元素也在相应的位置
        flag = 1
        for j in range(len(l)-i-1):    
            if l[j+1]<l[j]:
                flag = 0
                l[j], l[j+1] = l[j+1], l[j]
        if flag:
            break
  return l

 

2、选择排序

每轮循环从未排序元素中选择一个最大的,排在列表的最后位置

因为每轮只选择一个元素,所以选择排序没有优化算法,一定会循环n轮,不适合大规模数据

时间复杂度(最差/平均/最优):O(n^2)  O(n

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值