IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法笔记整理一:排序 -> 正文阅读

[数据结构与算法]算法笔记整理一:排序

系列文章目录


前言

笔记来源于视频(侵删):

清华计算机博士带你学习Python算法+数据结构

一、查找

在这里插入图片描述
在这里插入图片描述
二分查找要求列表有序
在这里插入图片描述

二、排序

在这里插入图片描述

在这里插入图片描述

总结:

  • 冒号排序:遍历n-1趟,每次两两交换,原地排序。外层循环为for i in range(len(li)),内层循环为for j in range(len(li)-1-i)。可以通过加一个判断(如果这一趟中没有发生交换,则说明已经全部排好序,终止循环)进行优化

  • 选择排序:遍历一遍列表,选择最小的值,放到新列表中,遍历n遍。

  • 插入排序:假定手里的牌已经有序,然后插入。即从第二个数开始遍历n-1趟,每次将当前的数与前面已经排好的数进行比较,将其插入到合适的位置。外层循环为for i in range(1,len(li)),令j=i-1,则内层循环为while tmp<li[j] and j >=0,即当升序排列时,当当前数tmp小于前一个数的时候就把前一个数往后挪,即令li[j] = li[j-1],j =j-1

  • 快排:选择第一个数tmp,使其左边的数小于tmp,右边的数大于tmp。参数为left、right、li:先往前从right开始遍历找到比tmp小的数,把它放到li[left]位置上,因为将第一个数tmp取出后左边有空位;然后在从left开始往后遍历,找到比tmp大的数,把它放到li[right]上,因为之前取出了right位置上的数,所以有空位,做循环,最后把tmp归位即可。然后做递归,左右两边分别递归,每次循环问题减半。

  • 堆排序:

  • 归并排序:假设两边分别有序,把两边合到一起使其整体有序。参数为low,mid,high,li:令i=low,j=mid+1,tmp=[],当升序排列时,当左右两边都有数的时候:依次比较li[i]和li[j]的大小,选择小的一个添加到tmp列表中去;当只有一端有数的时候,直接将剩下的数全部添加到tmp列表后面去,因为剩下的数是有序且大于之前添加的数的。然后做递归:当low<high,即最少有两个数的时候,先求出中间值mid,然后左右分别做递归,递归之后再对最小层的数做排序。

插入排序:
在这里插入图片描述

快排:
在这里插入图片描述
堆排序:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
时间复杂度:

  • O(1):执行一次基本操作的时间(近似),1是指1个单位(不看到底执行了几次,只要不上升到n次的时候 就是O(1))
  • O(n^2):当是n的(2+n)次方时,只保留大的即可,只需大概的时间即可,不需要很精确。
  • O(logn):当出现循环减半时,(即每次迭代让问题规模缩小一半)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
时间比空间重要。
在这里插入图片描述

1、冒号排序

需要n-1趟排序
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

2、选择排序

遍历一遍列表,选择最小的值,放到新列表中,遍历n遍。

在这里插入图片描述
缺点:

  • 占用了两倍内存,不是原地排序(冒号排序是原地排序),
  • 时间复杂度为O(n^2)
  • min函数的时间复杂度为O(n)(因为找列表最小值时,需要遍历列表,所以时间复杂度不是O(1)),remove函数的时间复杂度也是O(n)(因为删除列表中的某个数字后,需要将后面的数字依次往前移一位,否则会造成一个空位),所以整个算法的时间复杂度为O(n^2)(循环里面的两个O(n)记为一个)

优化:时间复杂度O(n^2)

在这里插入图片描述

3、插入排序

在这里插入图片描述
在这里插入图片描述

4、快速排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
时间复杂度:

  • 每一层的partition的复杂度是O(n),一共logn层,所以时间复杂度为O(nlogn)

  • 最坏情况:传入的列表为倒序,每次partition只变动一个值,则就不是logn层

优化:

  • 加入随机划分,即随机选择一个数,将其与第一个位置的数进行交换,然后再对其进行归位,会降低出现最坏情况的概率。

5、堆排序

堆排序时间复杂度是nlog(n)级别,和快速排序一样,但是在实际执行时,快排要快于堆排序

1、树与二叉树

在这里插入图片描述度:节点的分叉数

树的度= 整个树的最大的节点的度

E的度为2,F的度为3,

最大节点为A, 度为6,所以整个树的度为6
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由子节点找父节点:

  • 设子节点下标为i,则父节点为(i-1)//2

2、堆

在这里插入图片描述
在这里插入图片描述

2.1 堆的向下调整性质

在这里插入图片描述
堆的向下调整性质:

  • 1)在9和7(2的两个子节点)中进行比较,选择大的一个放到根节点(原2的位置)处
  • 2)比较2与8、 5(两个子节点)的大小,发现2小于子节点,继续向下调整,

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 堆挨个出数的过程

挨个出数过程(以大根堆为例):

  • 1)出9
  • 2)将3放到堆顶(根节点)(3为最后一个叶子结点)
  • 3)对3进行向下调整,恢复成大根堆
  • 4)出8(根节点),将最后一个叶子结点放到堆顶,进行向下调整
  • 5)继续上述过程,直到所有数字出完
    在这里插入图片描述

2.3 构造堆

1)找到最后一个非叶子节点,比较父节点和子节点的大小,使父节点大于子节点

2)调整倒数第二个非叶子节点,

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.4 堆排序算法

在这里插入图片描述

在这里插入图片描述

2.5 堆排序的应用:topk问题

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、归并排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

7、希尔排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

8、桶排序

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9、基数排序

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-08-31 15:42:15  更:2021-08-31 15:44:01 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:31:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码