排序算法快速记忆

基础概念

1,插入排序(以第一个元素先入序列,然后逐个入序列)

从第一个元素开始,该元素可以认为已经被排序,然后取出下一个元素,从已排序的元素序列从后往前扫描,如果大于就在后面,如果小于就放前面

2,希尔排序(index增量对比,增量递减至1)

1,先选定一个增量(第一次是个数除以二),然后将所有距离为gap的元素分在同一组,进行对比,比如10个数,增量是10/2=5,所以第一个数和第六个数对比,如果第六个比较大,就互换位置,直到第五个被执行完,然后增量=5/2=2,重复该步骤
2,当增量的大小减到1时的排序,等于排序完成

3,选择排序(从候选中挑选入序列)

最简单的做法就是每次从候选中挑选一个最小值放入序列,优化做法是每次从候选中挑选最大和最小值,分别放序列的两头

4,冒泡排序(对比右移动)

从第一数开始,逐个对比,如果比较大,就向右移动一位

5,堆排序(完全二叉树)

堆排序是一种不稳定的排序算法,它利用堆这种数据结构进行排序。堆排序的时间复杂度为O(nlogn),在原数据上进行排序,空间复杂度为 O(1)。但是,由于堆排序过程中必须先构建一个堆,因此需要占用额外的空间来存储堆。

6,快速排序(左右两边指针移动对比,停止指针位互换)

左右端最后一个分别是LR向中间走,但是位置并未变动,当左边走到比自己大的就停止,当右边遇到比自己小的也停止,然后指针的两个下标数据互换,互换结束后继续往前走,当两个指针碰一起,也就是index相同的时候,对比index的数据与两个端的大小,然后进行互换操作。这种算法快,复杂度是n*log2^n
简而言之,就是确定一个数作为基准,然后对比另一边,假设另一半大,就互换,然后基位到了另一边,反过来继续对比。

  • 假如数组是{2,8,7,1,3,5,6,4},以最后一个元素为基准元素,排序后结果是:{2,3,1,4,7,5,6,8}

1.起始指针位在index7,数字是4,对比左边指针位index0,数字是2,2比4小,对比下一位8 =》{2,8,7,1,3,5,6,4}
2.左指针位值 8 比右指针位值 4 大,位置互换,基准跳到左指针index1 =》{2,4,7,1,3,5,6,8}
3.重复一二步骤,左(1,4)比右(6,6)(5,5)都小,比(4,3)大,所以进行一次互换,基准位跳到4 =》{2,3,7,1,4,5,6,8}
4.基准位右指针位值 4)比左指针位值 7)小,互换,基准位跳到2 =》{2,3,4,1,7,5,6,8}
5.基准位左指针位值 4)比右指针位值 1)大,互换,基准位跳到3 =》{2,3,1,4,7,5,6,8}

7,归并排序

归并排序是一种稳定的、基于比较的排序算法,采用分治思想,将待排序列分成若干个子序列,对每个子序列进行内部排序,最后合并各个有序子序列,得到完整的有序序列。归并排序的时间复杂度为 O(nlogn),可以保证排序的稳定性。

总结

  • 插入排序:先从候选中选择一个,然后逐个拿来对比,与新的序列进行对比,然后插入新序列。(需要新增数组)
    选择排序:每次从候选中选择一个最小或者最大值,插入新的序列(需要新增数组)
  • 希尔排序:折中取对比偏移量,逐个根据偏移量进行数据对比和互换,结束后继续折中偏移量(无需新增数组)
  • 冒泡算法:下标位进行遍历对比,直接在原来的列表上进行换位置,注意这里并非固定某一个候选值与其他进行对比。(无需新增数组)
  • 堆排序:不稳定排序,(时间复杂度O(nlogn),空间复杂度为O(1),需新增一个堆)
  • 归并排序:稳定排序,分治思想。(时间复杂度O(nlogn))
  • 快速排序:挑选最后一个作为候选值,先左边逐个对比,遇到比自己大则互换,然后与右边互换位置向左逐个对比,遇到比自己小则互换。相当于拿一个值作为标准,通过左右不断互换的方式让这个标准值的左边比自己小,右边比自己大。所以快速排序得到的结果并非一定是顺序的。

归纳

  • 1,插入排序和选择排序,都是针对数值,讲究的是从原来数组中挑选出来得到一个新数组,一个是拿出来后对比插入,另一个是先对比后直接拿出来放入,都需要创建一个新数组。

  • 2,希尔排序、冒泡排序和快速排序,都是针对下标,一个是偏移对比,一个是逐个对比,最后一个是左右下标偏互换,都是在自身数组上操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/879167.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

buildroot移植qt报错Info: creating stash file (补充qt添加字库)

移植qt库,编译文件报错Info: creating stash file /home/rbing/QT/uart/.qmake.stash Project ERROR: Unknown module(s) in QT: serialport rbingouc:~/QT/uart$ /home/rbing/linux/tool/buildroot-2022.02.9/output/host/usr/bin/qmake Info: creating stash fil…

【LeetCode】每日一题 2024_9_18 坐上公交的最晚时间(排序,模拟)

前言 每天和你一起刷 LeetCode 每日一题~ LeetCode 启动! 题目:坐上公交的最晚时间 代码与解题思路 func latestTimeCatchTheBus(buses []int, passengers []int, capacity int) (ans int) {// 核心思路分析:// 你可以搭乘公交车的最晚到达…

【数据仓库】数据仓库常见的数据模型——维度模型

文章部分图参考自:多维数据模型各种类型(星型、雪花、星座、交叉连接) - 知乎 (zhihu.com) 文章部分文字canla一篇文章搞懂数据仓库:四种常见数据模型(维度模型、范式模型等)-腾讯云开发者社区-腾讯云 (ten…

React18快速入门

需要先安装并配置React相关的工具和插件 下载安装Node.js,这里以MacOS Node.js v22.6.0为例 终端命令行检查是否安装成功 node -v npm -vNode.js快速入门 npm设置镜像源 #设置为阿里镜像源 npm config set registry https://registry.npmmirror.com #查看是否生…

初始Linux 和 各种常见指令

目录 Linux背景 1. 发展史 Linux发展历史 1.历史 2. 开源 Linux下基本指令 01. ls 指令 02. pwd命令 03. cd 指令 04. touch指令 05.mkdir指令(重要): 06.rmdir指令 && rm 指令(重要): …

Minio环境搭建(单机安装包、docker)(一)

前言: 项目中客户不愿意掏钱买oss,无奈只能给他免费大保健来一套。本篇文章只是记录验证可行性,毕竟minio太少文档了,参考着官网来。后面还会再出一套验证集群部署的文章。 一、资料 MinIO官网: MinIO | S3 Compatib…

web渗透—RCE

一:代码执行 相关函数 1、eval()函数 assert()函数 (1)原理:将用户提交或者传递的字符串当作php代码执行 (2)passby:单引号绕过:闭合注释;开启GPC的话就无法绕过(GPC就是将单引号转换为"反斜杠单引号"&a…

基于python+django+vue的鲜花商城系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 【2025最新】基于pythondjangovueMySQL的线…

[数据集][目标检测]俯拍航拍森林火灾检测数据集VOC+YOLO格式6116张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):6116 标注数量(xml文件个数):6116 标注数量(txt文件个数):6116 标注…

图像滤波---各项异性扩散滤波使用笔记及代码

图像滤波---各项异性扩散滤波使用笔记及代码 一、文章内容介绍二、各项异性扩散滤波和各项同性滤波1、各项同性滤波2、各项异性扩散滤波3、各项异性和各项同性的对比 三、各项异性扩散滤波的原理介绍四、各项异性扩散滤波公式五、公式中的参数使用说明1、扩散速率 λ \lambda λ…

【C++】虚函数

一、什么是虚函数 在类的成员函数前加上virtual关键字&#xff0c;这个函数就是虚函数。 虚函数的所用就是完成多态。多态示例如下&#xff1a; class A {public:virtual void func()//虚函数{cout << "A" << endl;}void ftwo()//普通函数{cout <&…

黑神话·悟空藕丝步云履怎么获得?来看这一篇

1、传送到花果山-山脚-青嶂道土地庙。 2、在这里召唤筋斗云飞行岛章节刚开始的的初始位置方向 在这里推荐一款旗舰开放式耳机南卡OE Pro2&#xff0c;在目前有许多开放式耳机产品存在佩戴舒适度低且音质表现非常一般的当下&#xff0c;南卡开放式耳机凭借“非常规”的软硬结合…

Vue2电商平台项目 (三) Search模块、面包屑(页面自己跳自己)、排序、分页器!

文章目录 一、Search模块1、Search模块的api2、Vuex保存数据3、组件获取vuex数据并渲染(1)、分析请求数据的数据结构(2)、getters简化数据、渲染页面 4、Search模块根据不同的参数获取数据(1)、 派发actions的操作封装为函数(2)、设置带给服务器的参数(3)、Object.assign整理参…

智慧宿舍平台|基于Springboot+vue的智慧宿舍系统(源码+数据库+文档)

智慧宿舍系统 目录 基于Springbootvue的智慧宿舍系统 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取 博主介绍&#xff1a;✌️大厂码农|毕设布道师&#xff0c;阿里云开发社区乘风者…

java多线程模拟多个售票员从同一个票池售票

程序功能 这段代码模拟了多个售票员从一个有限的票池中售票的过程。主要功能如下&#xff1a; 票池共有50张票&#xff0c;多个售票员&#xff08;线程&#xff09;并发进行售票。 使用同步机制确保线程安全&#xff0c;避免多个售票员同时出售同一张票。 每个售票员不断检查票…

51单片机 - DS18B20实验1-读取温度

上来一张图&#xff0c;明确思路&#xff0c;程序整体裤架如下&#xff0c;通过单总线&#xff0c;单独封装一个.c文件用于单总线的操作&#xff0c;其实&#xff0c;我们可以把点c文件看成一个类操作&#xff0c;其属性就是我们面向对象的函数&#xff0c;也叫方法&#xff0c…

软考中级软件设计师——数据结构与算法基础学习笔记

软考中级软件设计师——数据结构与算法基本概念 什么是数据数据元素、数据项数据结构逻辑结构物理结构&#xff08;存储结构&#xff09; 算法什么是算法五个特性算法效率的度量时间复杂度空间复杂度 什么是数据 数据是信息的载体&#xff0c;是描述客观事物属性的数、字符及所…

【算法】队列与BFS

【ps】本篇有 4 道 leetcode OJ。 目录 一、算法简介 二、相关例题 1&#xff09;N 叉树的层序遍历 .1- 题目解析 .2- 代码编写 2&#xff09;二叉树的锯齿形层序遍历 .1- 题目解析 .2- 代码编写 3&#xff09;二叉树最大宽度 .1- 题目解析 .2- 代码编写 4&#xf…

自养号测评:如何在敦煌网打造爆款与提升店铺权重

敦煌网自养号测评是敦煌网卖家为了提升店铺权重、流量及销量而采取的一种策略。自养号测评指的是卖家自行注册并管理买家账号&#xff0c;通过模拟真实买家行为&#xff0c;为自家店铺进行测评、补单等操作。以下是对敦煌网自养号测评的详细解析&#xff1a; 一、自养号测评的…

Text-to-SQL技术升级 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法

Text-to-SQL技术升级 - 阿里云OpenSearch-SQL在BIRD榜单夺冠方法 Text-to-SQL 任务旨在将自然语言查询转换为结构化查询语言(SQL),从而使非专业用户能够便捷地访问和操作数据库。近期,阿里云的 OpenSearch 引擎凭借其一致性对齐技术,在当前极具影响力的 Text-to-SQL 任务…