图综合练习--拓扑排序_03 数据结构与算法 - 排序
- 1. 冒泡排序 Bubble Sort
- 基本思想
- 给定一个数组,这些元素将通过相互之间的比较,按照大小顺序一个个地像气泡一样浮出水面
- 实现
- 每一轮,从头部开始,每两个元素比较大小进行交换,直到这一轮中最大或最小元素被放置到尾部,不断重复,直到所有元素都排好位置
- 代码示例
- 基本思想
- 时间复杂度
- O(n2)
- 稳定的排序算法
- 指如果数组里两个相等的数,那么排序前后这两个相等的数的相对位置保持不变
- 时间复杂度
- 2. 插入排序 Insertion Sort
- 基本思想
- 不断地将尚未排好序的数,插入到已经排好序的部分
- 基本思想
- 特点
- 冒泡排序中,经过每一轮的排序处理后,数组后端的数是排好序的
- 插入排序中,经过每一轮的排序处理后,数组前段的数是排好序的
- 特点
- 解题思路
- 将数组分成左右两个部分,左边是已经排好序的部分,右边是没排序的部分
- 刚开始时,左边只有第一个元素
- 接下来,对右边的元素一个个进行处理,将他们放到左边
- 解题思路
- 代码示例
- 时间复杂度
- O(n2)
- 稳定的排序算法
- 时间复杂度
- 练习
- LC147:对一个链表进行插入排序
- 练习
- 3. 归并排序 Merge Sort
- 基本思想
- 分治
- 把复杂的问题分成两个或多个相同或相似的子问题,
- 然后把子问题分成更小的子问题,直到子问题可以简单的直接求解,
- 圆问题的解,就是子问题解的合并
- 基本思想
- 实现
- 先把数组从中间划分成两个子数组,一直递归地把子数组划分成更小的子数组,直到子数组里只有一个元素,才开始排序
- 排序方法:按照大小顺序合并两个元素,接着依次按照递归的返回顺序,不断地合并排好序的子数组,直到最后把整个数组的顺序排好
- 实现
- 代码示例
- 时间复杂度
- O(nlogn)
- 稳定的排序算法
- 时间复杂度
- 4. 快速排序 Quick Sort
- 基本思想
- 分治
- 基本思想
- 实现
- 从原始的数组,选取一基准值,筛选成较小和较大的两个子数组,然后从两个子数组不断地挑选基准值,进行递归排序,当所有的子数组的元素个数都为 1 时结束
- 实现
- 代码示例
- 复杂度
- 时间 最优:O(nlogn) 最坏:O(n2)
- 空间 O(logn)
- 复杂度
- 练习
- LC 215:给定一个尚未排好序的数组,要求找出第 k 大的数
- 解1 直接将数组进行排序,然后得出结果
- 解2 快速排序:每次随机选取一个基准值,将数组分成较小的一半和较大的一半,然后检查这个基准值最后所在的下标是不是 k,算法复杂度只需要 O(n)
- LC 215:给定一个尚未排好序的数组,要求找出第 k 大的数
- 练习
- 5. 拓扑排序 Topological Sort
- 前提
- 1. 图必须是有向图
- 2. 图里面没有环
- 用途
- 用来理清具有依赖关系的任务
- 用途
- 实现
- 1. 将问题用一个有向无环图进行抽象表达,定义出哪些是图顶点,顶点之间如何互相关联
- 2. 可以利用广度优先搜索 或 深度优先搜索 进行拓扑排序
- 实现
- 选择一个没有前驱(入度为 0)的顶点,输出,然后删除该顶点及相关的有向边
- 重复上述操作
- 实现
- 代码示例
- 时间复杂度
- O(n)
- 时间复杂度
图综合练习--拓扑排序_03 数据结构与算法 - 排序相关推荐
- 拓扑排序 php,数据结构与算法(周测7-拓扑排序和AOV网络)
判断题 1.AOE图的关键路径就是最长的路径 T F 2.AOE图的权值最大的边(活动)一定是关键活动. T F 两条边相加可能比最大的边还要大. 3.在AOE-网工程中,减少任一关键活动上的权值后, ...
- 数据结构与算法 / 排序算法 / 堆排序
一.定义 借助堆结构实现的排序算法被称为堆排序. 二.过程说明 1.建堆 (1)方法1 原地建堆,对于数组来说,从前往后:对于树来说,从下向上. 将数组的第一个元素作为堆顶,第二个元素做向堆中插入数据 ...
- 数据结构与算法 / 排序算法(3)
一.桶排序(Bucket sort) 1.原理 将要排序的数据分到几个有序的桶里,每个桶里的数据再进行排序.桶内的数据排序完毕之后,再把桶里的数据依次取出,组成的序列就是有序的了. 2.原地排序? 属 ...
- java 数据结构和算法 排序
排序算法 排序算法的介绍 算法的时间复杂度 **度量一个程序(算法)执行时间的两种方法** **时间频度** **时间复杂度** **常见的时间复杂度** 平均时间复杂度和最坏时间复杂度 算法的空间复 ...
- 排序(数据结构与算法)
排序 通俗的定义:就是重新排列 表/集合 中的 元素/数据元素/记录, 使 表/集合 中的元素 满足按其关键字 递增或递减的过程. 严格定义: 输入:n个记录R1 R2 ......Rn, 对应的关键 ...
- python 数据结构与算法——排序
文章目录 排序的分类 排序的复杂度 python 实现 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快排 树排序 线性时间排序算法 计数排序 桶排序 桶排序的复杂度分析 基数排序 排序的 ...
- 数据结构与算法 / 排序算法 / 基本概念
1. 概念 满有序度:两两一对的数量. 有序度:满足排序规则的对数. 逆序度:未满足排序规则的对数. 排序的过程,即为有序度递增的过程.当有序度等于满有序度时,数组有序. 2. 公式 满 有 序 度 ...
- 数据结构与算法 / 排序算法(2)
一.归并排序 1.原理 采用分治思想.将数组分成前后两部分,先将这两部分进行排序,然后再将二者合并即可. 2.原地排序? 不属于原地排序.因为每次合并都需要申请大小为 n 的临时数组用于保存合并之后的 ...
- 数据结构与算法 / 排序算法(1)
零.前言 1.常用的排序算法总结 排序算法种类 时间复杂度 是否基于比较 冒泡.插入.选择 O(n^2) √ 快排.归并 O(nlogn) √ 桶.计数.基数 O(n) × 2.算法的内存消耗 - 原 ...
最新文章
- UI设计培训之设计中的点线面-面
- 从源码出发:JAVA中对象的比较
- 阿里新晋 CNCF TOC 委员张磊:“云原生”为什么对云计算生态充满吸引力?
- Apace、Ngnix、Tomcat三者关系
- python hashlib 哈希算法
- WebPart中的ReplaceTokens 方法
- IOC操作Bean管理XML方式(FactoryBean)
- mysql+odbc+ado_MFC ado+mysql+odbc技术分享
- Keras requires TensorFlow 2.2 or higher怎么办?
- python db.commit_python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)...
- 啥是前端开发工程师必会的5种网页布局方法?
- 22男人应该明白的道理
- Android RadioButton,使用Kotlin的RadioGroup
- 同济大学 线性代数 第六版 pdf_线性代数(第六版)【课后习题答案】
- B2C项目系统软件测试计划
- 贵圈似乎有点乱:“5G手机”居然比5G网络先到了?
- Unable to launch WebDriverAgent because of xcodebuild failure: “iproxy exited with code ‘234‘“
- 小熊派鸿蒙开发板,小熊派-鸿蒙#183;季开发板入门(一)
- 记录vue中使用了transition后使用fixed引起的Bug
- css3 和html5实例,HTML5和CSS3实例教程
热门文章
- python中reduce是什么意思,python中的map和reduce有什么不同
- 不同坐标系下角速度_技术 | 西安80坐标与地方坐标系的转换方法技巧
- 神经网络的sigmoid激活函数是一种平方映射
- 组态王中时间存access怎么存,组态王通过Access数据库起始截止日期查询方法
- modelsim加入xilinx ISE库的方法
- 1至m为PQ节点,m+1至n-1为PV节点,n为平衡节点
- busybox编译笔记
- 用Session和唯一索引字段实现通用Web分页功能
- 制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件
- 链接器(linker)的作用——CSAPP第7章读书笔记