• 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)
    • 5. 拓扑排序 Topological Sort
    • 前提
      • 1. 图必须是有向图
      • 2. 图里面没有环
    • 用途

      • 用来理清具有依赖关系的任务
    • 实现

      • 1. 将问题用一个有向无环图进行抽象表达,定义出哪些是图顶点,顶点之间如何互相关联
      • 2. 可以利用广度优先搜索 或 深度优先搜索 进行拓扑排序
    • 实现
      • 选择一个没有前驱(入度为 0)的顶点,输出,然后删除该顶点及相关的有向边
      • 重复上述操作
    • 代码示例
    • 时间复杂度

      • O(n)

图综合练习--拓扑排序_03 数据结构与算法 - 排序相关推荐

  1. 拓扑排序 php,数据结构与算法(周测7-拓扑排序和AOV网络)

    判断题 1.AOE图的关键路径就是最长的路径 T F 2.AOE图的权值最大的边(活动)一定是关键活动. T F 两条边相加可能比最大的边还要大. 3.在AOE-网工程中,减少任一关键活动上的权值后, ...

  2. 数据结构与算法 / 排序算法 / 堆排序

    一.定义 借助堆结构实现的排序算法被称为堆排序. 二.过程说明 1.建堆 (1)方法1 原地建堆,对于数组来说,从前往后:对于树来说,从下向上. 将数组的第一个元素作为堆顶,第二个元素做向堆中插入数据 ...

  3. 数据结构与算法 / 排序算法(3)

    一.桶排序(Bucket sort) 1.原理 将要排序的数据分到几个有序的桶里,每个桶里的数据再进行排序.桶内的数据排序完毕之后,再把桶里的数据依次取出,组成的序列就是有序的了. 2.原地排序? 属 ...

  4. java 数据结构和算法 排序

    排序算法 排序算法的介绍 算法的时间复杂度 **度量一个程序(算法)执行时间的两种方法** **时间频度** **时间复杂度** **常见的时间复杂度** 平均时间复杂度和最坏时间复杂度 算法的空间复 ...

  5. 排序(数据结构与算法)

    排序 通俗的定义:就是重新排列 表/集合 中的 元素/数据元素/记录, 使 表/集合 中的元素 满足按其关键字 递增或递减的过程. 严格定义: 输入:n个记录R1 R2 ......Rn, 对应的关键 ...

  6. python 数据结构与算法——排序

    文章目录 排序的分类 排序的复杂度 python 实现 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快排 树排序 线性时间排序算法 计数排序 桶排序 桶排序的复杂度分析 基数排序 排序的 ...

  7. 数据结构与算法 / 排序算法 / 基本概念

    1. 概念 满有序度:两两一对的数量. 有序度:满足排序规则的对数. 逆序度:未满足排序规则的对数. 排序的过程,即为有序度递增的过程.当有序度等于满有序度时,数组有序. 2. 公式 满 有 序 度 ...

  8. 数据结构与算法 / 排序算法(2)

    一.归并排序 1.原理 采用分治思想.将数组分成前后两部分,先将这两部分进行排序,然后再将二者合并即可. 2.原地排序? 不属于原地排序.因为每次合并都需要申请大小为 n 的临时数组用于保存合并之后的 ...

  9. 数据结构与算法 / 排序算法(1)

    零.前言 1.常用的排序算法总结 排序算法种类 时间复杂度 是否基于比较 冒泡.插入.选择 O(n^2) √ 快排.归并 O(nlogn) √ 桶.计数.基数 O(n) × 2.算法的内存消耗 - 原 ...

最新文章

  1. UI设计培训之设计中的点线面-面
  2. 从源码出发:JAVA中对象的比较
  3. 阿里新晋 CNCF TOC 委员张磊:“云原生”为什么对云计算生态充满吸引力?
  4. Apace、Ngnix、Tomcat三者关系
  5. python hashlib 哈希算法
  6. WebPart中的ReplaceTokens 方法
  7. IOC操作Bean管理XML方式(FactoryBean)
  8. mysql+odbc+ado_MFC ado+mysql+odbc技术分享
  9. Keras requires TensorFlow 2.2 or higher怎么办?
  10. python db.commit_python对MySQL进行数据的插入、更新和删除之后需要commit,数据库才会真的有数据操作。(待日后更新)...
  11. 啥是前端开发工程师必会的5种网页布局方法?
  12. 22男人应该明白的道理
  13. Android RadioButton,使用Kotlin的RadioGroup
  14. 同济大学 线性代数 第六版 pdf_线性代数(第六版)【课后习题答案】
  15. B2C项目系统软件测试计划
  16. 贵圈似乎有点乱:“5G手机”居然比5G网络先到了?
  17. Unable to launch WebDriverAgent because of xcodebuild failure: “iproxy exited with code ‘234‘“
  18. 小熊派鸿蒙开发板,小熊派-鸿蒙#183;季开发板入门(一)
  19. 记录vue中使用了transition后使用fixed引起的Bug
  20. css3 和html5实例,HTML5和CSS3实例教程

热门文章

  1. python中reduce是什么意思,python中的map和reduce有什么不同
  2. 不同坐标系下角速度_技术 | 西安80坐标与地方坐标系的转换方法技巧
  3. 神经网络的sigmoid激活函数是一种平方映射
  4. 组态王中时间存access怎么存,组态王通过Access数据库起始截止日期查询方法
  5. modelsim加入xilinx ISE库的方法
  6. 1至m为PQ节点,m+1至n-1为PV节点,n为平衡节点
  7. busybox编译笔记
  8. 用Session和唯一索引字段实现通用Web分页功能
  9. 制造内核崩溃并使用crash分析内核崩溃产生的vmcore文件
  10. 链接器(linker)的作用——CSAPP第7章读书笔记