十种排序算法概览

2023-11-06

本文旨在为了忘记时快速回忆起十种排序算法大致分别怎么进行的,没有具体讲解也无具体代码,具体讲解与代码可以参考:算法通关手册01章02节

快速记忆表格

参考b站视频:马士兵说:30秒让你记住所有排序算法-宋词记忆法
在这里插入图片描述

快速回忆各算法

重点是插入排序归并排序堆排序快速排序。为便于理解记忆,称数组中索引小的元素是‘左边’的元素,索引大的元素是‘右边’的元素。

01.冒泡排序

从左往右依次扫描,相邻元素依次比较(索引依次是01,12,23,34……),左右两个元素,左小于等于右不变,右小于左不变。

02.选择排序

从左往右依次扫描,以第 i i i个元素为标杆( i i i 0 0 0 n n n依次增大),从 i + 1 i+1 i+1以后的元素中选择最小的元素,若该元素小于第 i i i个元素则交换,不然则不变。

03.插入排序(重点)

从左往右依次扫描,前 i i i项都是已经用排好的序列( i i i 0 0 0 n n n依次增大),把第 i + 1 i+1 i+1项(无序序列的第一项)依次与 i i i项及以前的元素比较大小,插入到合适的位置。

04.希尔排序

b站视频:马士兵说:希尔排序算法-整点儿稍微复杂的

Q:既然希尔排序每组内也用的是插入排序,为什么不直接使用插入排序?
A:因为如果分组很多,每个组内元素就比较少,移动、比较、插入的次数就会少一些;
分组较多时
如图,一组内只有4个元素,数字1只需要比较3次,就可以挪到最开头,但如果直接整个序列用插入排序,那次数可就多多了。

而若最后一步gap为1了,挪到的距离又比较少,所以整体复杂度比插入排序少很多。
gap为1时
如图,若到了最后一步,gap为1了,那么由于组内已经排好序了,较小的元素都会比较集中在前面,因此移动的次数也会变少。

05.归并排序(重点)

06.快速排序(重点)

07.堆排序(重点)

08.计数排序

09.桶排序

10.基数排序

练习

LeetCode 912. 排序数组
如果不用内置函数,可以在这道题里把各种算法自己实现一遍

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

十种排序算法概览 的相关文章

随机推荐

  • mybatis(六) 处理枚举类型

    处理枚举类型 若想映射枚举类型 Enum 则需要从 EnumTypeHandler 或者 EnumOrdinalTypeHandler 中选一个来使用 比如说我们想存储取近似值时用到的舍入模式 默认情况下 MyBatis 会利用 EnumT
  • python数据清洗的三个常用的处理方式!

    关于python数据处理过程中三个主要的数据清洗说明 分别是缺失值 空格 重复值的数据清洗 这里还是使用pandas来获取excel或者csv的数据源来进行数据处理 若是没有pandas的非标准库需要使用pip的方式安装一下 pip ins
  • 华为OD机试真题-分班-2023年OD统一考试(B卷)

    题目描述 幼儿园两个班的小朋友在排队时混在了一起 每位小朋友都知道自己是否与前面一位小朋友是否同班 请你帮忙把同班的小朋友找出来 小朋友的编号为整数 与前一位小朋友同班用Y表示 不同班用N表示 输入描述 输入为空格分开的小朋友编号和是否同班
  • 深度网络架构的设计技巧<一>:Can CNNs Be More Robust Than Transformers?

    导读 启发于Transformer结构 作者将三种设计引入到CNN中 加强后的CNN取得比ViT更强的鲁棒性 这三种设计 实现简单 仅仅几行代码就能实现高效的CNN结构设计 ArXiv https arxiv org abs 2206 03
  • 数据挖掘的基础

    目录 数据挖掘 一 数据挖掘理解 二 数据准备 1 缺失值处理 2 异常值处理 3 数据偏差的处理 4 数据的标准化 5 特征选择 三 数据建模 1 分类问题 2 聚类问题 3 回归问题 4 关联问题 四 评估模型 1 混淆矩阵与准确率指标
  • C语言删除一个字符串中的多余空格字符

    删除一个字符串中的多余空格字符 使得字符串中的每个单词之间只有一个空格字符 code C C char my delblank char str char newStr char start str while start start st
  • 2021年计算机保研经验帖(真平民)(上交网安、复旦、南大、同济、北航、东南)

    个人背景 中九5 数学辅修 数模省一 组织经历较丰富 干啥啥不行 活动第一名 软著及项目若干 无论文无科研 什么叫学混啊 有强烈的上海和南京倾向 有倾向是好事 但是也不要过于自信 因为各个学校的审核很迷 还是要适当海投保证自己有学上 夏令营
  • (二):Qt信号槽连接及触发原理

    经过 Qt信号槽之 准备阶段 学习 我们知道信号是函数 里面调用了 QMetaObject activate 函数 而对于接收端的槽函数或信号 是通过私有静态函数 qt static metacall 调用元方法 源头是有的 接收端也是有的
  • 【Vue学习笔记6】好用的 Vueuse 工具包

    1 安装Vueuse VueUse 的官方 https vueuse org 的介绍说这是一个 Composition API 的工具集合 适用于 Vue 2 x 或者 Vue 3 x 用起来和 React Hooks 还挺像的 VueUs
  • Altium Designer 13 设计备忘录7——如何让过孔/地孔覆铜全覆盖

    通常在PCB布线布局完成后 都会开始对整块板子进行覆铜 这时可能会出现以下过孔 地孔无法全覆盖的情况 通过菜单栏上的设计 Design 规则 R 找到Plane 选择Polygon Connect Style下 PolygonConnect
  • idea新建文件时没有xml文件的处理办法

    1 大部分人在新建spring项目时 会发现新建项目时没有xml文件的选项 如下图所示 2 此问题是pom文件没有正确引入依赖导致的 可以尝试在pom文件中加入spring依赖尝试一下 在pom文件中加入以下依赖 并且更新maven
  • VS编译OpenCV3

    目录 流程 源码 环境 编译完成库 流程文档转载 防丢 1 下载Cmake 2 下载OpenCV源码 3 编译OpenCV 4 最后一步 VS编译openCV 4 1编译Debug版的openCV 4 2编译Release版的openCV
  • 介绍 Golang Timer(定时器)

    介绍 Golang Timer 定时器 本文介绍Golang Timer 定时器 位于Golang 的time包 常用于衡量代码执行效率 示例 假设一个业务方法需要衡量其执行效率 整个执行时间不能超过60秒 一旦超过发送通知 实现一 pac
  • Flutter生成带图片的二维码

    现在的APP中经常需要用自己的信息生成一个二维码给别人扫 下面就介绍一下Flutter中怎么生成一个带图片的二维码 需要用到的插件qr flutter 首先在 pubspec yaml 文件中添加以下依赖 添加依赖后在 pubspec ya
  • Vc - Qt - 仿照微信聊天窗口 - demov.1.0 初步展示

    项目是开源的 项目所在的github的地址 https github com JLZJMWSY Win32 https github com JLZJMWSY Win32 https github com JLZJMWSY Win32下的Q
  • for循环执行顺序---看一篇就懂了。

    for循环是程序代码中我们使用最多的循环体 当然了while do while也经常使用 其中do while常用于循环体无论判断条件是否正确 都会至少执行一次 for int i 0 i lt 5 i 循环体 执行顺序解抛 执行的顺序如下
  • echarts pie饼图既显示内部又显示外部指示线

    查了echarts 文档 并不能通过简单的配置来实现 原因如下 在单个serie的label中 只能设置一个label 位置可以选择在饼图内部inner 或者饼图外部outer 无法实现同时实现内部 外部显示 想到设置两个serie 让两个
  • Java三部曲(二)JavaWeb

    前言 1 什么是JavaWeb Web 全球广域网 也成为万维网 www 能通过浏览器访问的网站 JavaWeb 用Java开发网站的技术栈 2 本教程的基础框架 网页端 展现数据 HTML 制作页面 CSS 美化页面 JavaScript
  • matlab三维图形的绘制

    采用matlab进行三维图绘制 1 mesh函数 网格图 mesh x y z x是n维向量 y是m维向量 z是m n维向量 x 1 0 1 10 y 1 0 1 10 x y meshgrid x y z x 2 y 2 mesh x y
  • 十种排序算法概览

    十种排序算法概览 快速记忆表格 快速回忆各算法 01 冒泡排序 02 选择排序 03 插入排序 重点 04 希尔排序 05 归并排序 重点 06 快速排序 重点 07 堆排序 重点 08 计数排序 09 桶排序 10 基数排序 练习 本文旨