Python3 排序算法总结笔记

本文详细介绍了Python3中的各种排序算法,包括稳定性、内部排序和外部排序的概念。讲解了插入排序(简单插入排序、希尔排序)、选择排序(简单选择排序、归并排序)、交换排序(冒泡排序、快速排序)以及基数排序。通过实例解析了每种排序算法的时间复杂度、空间复杂度和稳定性,特别强调了希尔排序和快速排序在实际应用中的优势。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文图片出处:菜鸟教程 python3实例, 中国大学MOOC——电子科技大学数据结构与算法课程

〇、简介

1. 稳定性

[3,4,8,5,3,6] 排序后:
[3,3,4,5,6,8] 稳定排序
[3,3,4,5,6,8] 不稳定排序(两个3的相对位置发生改变)

2. 内部排序和外部排序

内部排序:不需要访问外存即可完成排序
外部排序:参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成

3. 内部排序的方法

序列分为有序序列区和无序序列区,逐渐增大有序序列区,减小无序序列区,直至排序完成。
在这里插入图片描述

一、插入排序

1. 简单插入排序

共n-1轮
时间复杂度:O(N)-O(N2) 平均为O(N2)
空间复杂度:O(1)
稳定性:稳定(temp < l[j-1]才满足,相等的时候不交换位置)
复杂性:简单
特点:用直接插入排序,原序列越接近有序序列(逆序的个数越少),比较次数越少
在这里插入图片描述
在这里插入图片描述

l = [5,3,87,4,12,54,8,5,66]
def insertSort(l):
    for i in range(1, len(l)): #从下标1的元素开始排序,默认temp前的子序列是已排序完毕的
        temp = l[i] #哨兵,临时存放未排序序列的第一个元素
        j = i
        while j>0 and temp < l[j-1]: #当已排序子列表的最后一个元素比temp要大,
            #那么就把这个元素后移一位,然后指针前移,下一次循环temp和前一个元素比较大小
            #并且指针最小到下标1,到下标0的时候j-1就变成了-1了
            l[j] = l[j-1] #元素后移
            j -= 1 #指针前移
        l[j] = temp #循环结束,当前指针所在位置即为temp的位置,此时当前元素排序完毕
    return l
insertSort(l)

2. 希尔排序

简单插入排序的升级版
适合应用于几千几万个数值的排序(中等大小排序)
时间复杂度:O(NlogN)~O(N2)
空间复杂度:O(1)
稳定性:不稳定
复杂性:复杂

希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值