当前位置: 首页 > article >正文

【数据结构】排序算法系列——序言(附源码+图解)

作为基础算法的中流砥柱部分,排序算法一直都是计算机学习者们不可忽略的一部分。而其中的算法思想也蕴含着许多在今后的算法学习甚至是整个计算机技术的学习之中仍然熠熠生辉的算法思想,它们引领着我们不断探索算法的奥秘之处。所以,学习排序算法是十分重要的。 我将从十大内排序算法以及外排序的分类角度来进行详细解读,如有不解或者是疏漏还请多多见谅~一起讨论学习!

排序简介

在《算法导论》这本经典的算法学习中,我们可以看到“排序”二字的出现频率极高,更是直接拿出一整章节来对其中的快速排序、堆排序等进行讲解。

3b50a07e6f4646d6b2197e21c024c339.png

了解一种算法的重要程度,我们可以直接在这本书中所占的权重来粗略得知。

在维基百科中,对排序算法的解释是这样的。

2905d5323b8641648243a92b1b7b7159.png

排序算法(英语:Sorting algorithm)是一种将一组特定的数据按某种顺序进行排列的算法。简单来说,就是将一堆杂乱的数据处理成有序的数据。我们在进行排序的时候必须遵循两个原则:

  • 输出的结果一般是递增或者是递减序列,这里的递增递减既可以代表着“有序”二字;

  • 输出结果是原来输入的一种重新组合,不得删除或新增数据

在遵循这两个原则的基础上,诞生了众多不同的排序算法,它们或许在排序的过程中遵守着自己不同的规律,但是始终都遵守着以上两个原则。

排序算法同样也根据复杂度来区分其速度,同时也引入了一个新的判定概念——稳定性。

稳定性的概念

在排序过程中,我们会涉及到比较的概念,也就涉及到相对位置的概念,举例:

排序前,红5在蓝5的前面,蓝5在红5的后面;

53efcab3594a4ea996299c051478712b.png

在排序后,如果红5依旧蓝5前面,那么就是稳定的——我们可以理解为两者的相对位置只要不变,就是稳定的,如果变化了,实际上就会打乱原有的顺序,在内存存储和某些问题上会产生变动,从而就不稳定了

排序的稳定性不是决定这个算法是否好用的唯一标准,甚至可以说一个排序稳不稳定完全不影响它的速度和可用性。但是从一个对象的多个属性上来说,好的稳定性可以帮助在保持整体排序的同时能够实现不同属性的排序——由此可见稳定性的意义是从需求上出发的。各个排序算法的稳定性将在后续分别进行分析。

8844de37b3184615bcd950be2488e5ad.png

接下来的更新将对各个排序算法进行逐帧分析。欢迎大佬们关注我的排序系列文章!


http://www.kler.cn/a/300019.html

相关文章:

  • Harmony Next 支持创建分身
  • Genetic Prompt Search via Exploiting Language Model Probabilities
  • 【mptcp】ubuntu18.04和MT7981搭建mptcp测试环境操作说明
  • 7.8 ChatGPT 开发者模式实战:第三方天气查询平台对接,如何打造爆款天气应用?
  • vue3搭建实战项目笔记
  • ue5 GAS制作一个技能
  • Python爱心射线
  • 【VUE】pinia持久化存储
  • python 学习一张图
  • 代码随想录:377. 组合总和 Ⅳ
  • OpenCV结构分析与形状描述符(14)拟合直线函数fitLine()的使用
  • Android Studio下载Gradle失败问题解决
  • C++中string的简单实现
  • 【Hot100】LeetCode—739. 每日温度
  • 【Hot100】LeetCode—322. 零钱兑换
  • 关于武汉芯景科技有限公司的IIC缓冲器芯片XJ4307开发指南(兼容LTC4307)
  • 网络安全(sql注入)
  • DS18B20的C语言驱动
  • 基础算法(2)——滑动窗口
  • 针对中小企业数智化需求,新华三重磅发布 SMB 系列新品
  • 某仿soul欲音社交系统存在任意文件读取漏洞
  • 重修设计模式-结构型-代理模式
  • 音视频入门基础:WAV专题(9)——FFmpeg源码中计算WAV音频文件每个packet的duration和duration_time的实现
  • flinkcdc 问题记录篇章
  • 只有IP地址没有域名怎么实现HTTPS访问?
  • 【高级编程】Java IO流(补)序列化 反序列化