几种常用排序算法

news2024/9/23 13:17:02

1 基本概念

排序是处理数据的一种最常见的操作,所谓排序就是将数据按某字段规律排列,所谓的字段就是数据节点的其中一个属性。比如一个班级的学生,其字段就有学号、姓名、班级、分数等等,我们既可以针对学号排序,也可以针对分数排序。

  • 稳定性 在一组无序数据中,若两个待排序字段一致的数据,在排序前后相对位置不变,则称排序算法是稳定的,否则是不稳定的。(应该是原先有序的在排序中会不会出现改变)

  • 内排序与外排序 如果待排序数据量不大,可以一次性全部装进内存进行处理,则称为内排序,若数据量大到无法一次性全部装进内存,而需要将数据暂存外存,分批次读入内存进行处理,则称为外排序。

2 选择排序

遍历两层,复杂度较高

3 插入排序

减少队列和构建新的队列,新的队列插入算法可以优化。

4 希尔排序

插入排序的升级版,一开始分成几组,每组内部排序,逐步减少分组数量。

5 冒泡排序

复杂度比选择排序好一些

6 快速排序

几个做法:

两端往中间走:在l>k>r时交换;

挖坑移树法:也是两端往中间走,将Key位腾出来,存放L和R碰到的大和小的数据,

前后指针(交换小的在前):如图,重点讲,是前面两种做法的进化版,目前也是用的比较多的。

思路:

大原则(跟前面一样):用一个Key来分割所有数据成为“<K<”,然后继续前后分别递归继续;

分割时:用一个cur游标,从头找到尾,找出小的数据放到“后面队列”,用一个Prev(后面队列的车头)来推动大的数据将cur发现的小数交换到后面。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【开源库】libodb库编译及使用

前言 本文介绍windows平台下libodb库的编译及使用。 文末提供libodb-2.4.0编译好的msvc2019_64版本&#xff0c;可直接跳转自取 ODB库学习相关 【开源库学习】libodb库学习&#xff08;一&#xff09; 【开源库学习】libodb库学习&#xff08;二&#xff09; 【开源库学习】…

K8S 部署jaeger-operator,与其演示项目hotrod

最近在研究observabilty在K8S环境的onboard&#xff0c;查阅了一些资料&#xff0c;发现现在网上Prometheus/Metrics相关的资源&#xff0c;是比较全面的&#xff0c;而Trace相关的部分不是很全面&#xff0c;所以写下这篇博文&#xff0c;以做备忘和分享。 组件介绍 我这里选…

C++面试题之判断一个变量是不是指针

对于变量其实对应的就是内存&#xff0c;而内存并没有表明一定是什么数据类型&#xff0c;所以判断变量是否是一个指针其实是一个参数类型匹配问题&#xff0c;在C中支持函数的重载&#xff0c;那么不同的函数因为参数的不同从而匹配不同函数调用过程。 编译器在进行函数匹配调…

格密码基础

目录 写在前面 一. 格上基本向量 二. 封闭球内格点数 三. 半稳定格 四. Chernoff-Hoeffding 界 五. 格密码中常用的细节 六. 可证明安全的格基 6.1 引入问题 6.2 格基选取 6.3 流程性小结 写在前面 本文章主要介绍格密码中所使用的一些基本概念&#xff0c;其中包括…

SVN分支管理基本原理

原文全文详见个人博客&#xff1a; SVN分支管理基本原理学习完svn和git的版本管理理念上的差异后&#xff0c;自然的我们再进一步对比svn和git在分支管理上的原理差异&#xff0c;这种差异正是由二者版本管理理念和存储方式差异造成的&#xff0c;今天我们先研究一下svn的分支…

Python爬虫(基本流程)

1. 确定目标和范围 明确需求&#xff1a;确定你需要从哪些网站抓取哪些数据。合法性&#xff1a;检查目标网站的robots.txt文件&#xff0c;了解哪些内容可以被抓取。数据范围&#xff1a;确定爬取数据的起始和结束点&#xff0c;比如时间范围、页面数量等。 2. 选择合适的工…

展望未来:利用【Python】结合【机器学习】强化数据处理能力

欢迎来到 破晓的历程的 博客 ⛺️不负时光&#xff0c;不负己✈️ 文章目录 一、引言二、数据清洗与预处理三、特征工程四、数据可视化五、模型训练与评估六、模型部署与优化七、总结 在数据驱动的时代&#xff0c;数据处理与机器学习技术的结合已成为推动业务增长和创新的关键…

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测

分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测 目录 分类预测 | Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现WOA-CNN-SVM鲸鱼算法优化卷积支持向量机分类预测&#xff0…

前端基础之JavaScript学习——函数的使用

大家好我是来自CSDN的前端寄术区博主PleaSure乐事&#xff0c;今天我们继续有关JavaScript的学习&#xff0c;使用的编译器为vscode&#xff0c;浏览器为谷歌浏览器。 函数的声明与使用 声明 在JavaScript当中函数的声明和其他语言类似&#xff0c;使用如下格式即可声明&…

SpringBoot+Session+redis实现分布式登录

SpringBootSessionRedis实现分布式登录功能实现 文章目录 目录 文章目录 前言 一、引库 二、修改配置文件 三、使用 四、解决乱码问题 1.引库 2.配置redis序列化 3.配置Session-Redis序列化 前言 这里简单介绍一下&#xff0c;如果你想多台机器部署你的项目的话&#xff0c;在…

Python爬虫速成之路(6):Selenium的使用

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

Excel的操作

Excel的操作 一、Excel的作用 Excel是一款功能强大的电子表格软件&#xff0c;主要用于数据处理和分析。 二、Excel的基础操作 新建文档 一般情况下&#xff0c;就在桌面空白处&#xff0c;点击鼠标右键&#xff0c;即可新建 三、页面布局 1、快速访问工具栏 主要包含&am…

前端特效动画魔法书:文字渐入效果实现,可做引导页面

前端特效动画魔法书&#xff1a;文字渐入效果实现&#xff0c;可做引导页面 简介 在网页设计的世界中&#xff0c;动画是吸引用户眼球的魔法。Anime.js&#xff0c;一个轻量级且功能强大的JavaScript动画库&#xff0c;是实现这一魔法的完美工具。本文将作为你的技术文档&…

深入理解PHP基础【代码审计实战指南】

文章目录 基础语法单双引号的区别前后端分离数据类型PHP常量函数var_dump函数count函数print_r函数**readfile&#xff08;&#xff09;函数****file_get_contents()函数****file_put_contents()函数**header函数fopen函数fread 函数rename函数copy&#xff08;&#xff09;函数…

什么是单例模式,有哪些应用?

目录 一、定义 二、应用场景 三、6种实现方式 1、懒汉式&#xff0c;线程不安全。 2、懒汉式&#xff0c;线程安全 3、双检锁/双重校验锁&#xff08;DCL&#xff0c;即 double-checked locking&#xff09; 4、静态内部类方式-------只适用于静态域 5、饿汉式 6、枚举…

MATLAB函数介绍——plotm

简述 matlab中&#xff0c;plotm和不带“m”的plot意义相似&#xff0c;都是绘制二维图像的。只是加了m以后&#xff0c;在绘制时将图像投影到了世界地图坐标系上面进行显示。 plotm的第一个输入量是纬度&#xff0c;第二个输入量是经度&#xff0c;单位都是弧度。 例程 官方…

各种复现,保证质量

代码复现&#xff0c;文献复现&#xff0c;模型复现&#xff0c;算法复现&#xff0c;文章复现&#xff0c;创新点等等&#xff0c;python/matlab/c语言/r语言均可&#xff0c;保证高质量完成&#xff0c;可接急单&#xff0c;不成功不收费&#xff01;

docker应用:搭建云手机

简介&#xff1a;近来慵懒&#xff0c;身体懈怠良多&#xff0c;思来想去随手看点小攻略以宽慰不懈怠的心。云手机Cloudphone&#xff0c;就是将云计算技术运用于网络终端服务&#xff0c;通过云服务器实现云服务的手机。其实就是深度结合了网络服务的智能手机&#xff0c;这类…

基于多线程延迟排序的睡眠排序算法的创新与改进

基于多线程延迟排序的睡眠排序算法的创新与改进 摘要 本文在传统睡眠排序算法的基础上&#xff0c;提出了一种改进方案&#xff0c;旨在优化处理负数和大规模数据集的性能。通过引入线程池管理和数据分段排序技术&#xff0c;改进后的算法在处理大数据集和包含负数的数据集时…

【11】微服务链路追踪SkyWalking

1、skywalking是什么 1.1 链路追踪介绍 对于一个大型的几十个、几百个微服务构成的微服务架构系统&#xff0c;通常会遇到下面一些问题&#xff0c;比如&#xff1a; 如何串联整个调用链路&#xff0c;快速定位问题&#xff1f;如何缕清各个微服务之间的依赖关系&#xff1f;…