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

十大排序简介

十大排序简介

  • 一、排序分类
  • 二、排序思路
    • 1.冒泡排序(Bubble Sort)
    • 2.选择排序(Selection Sort)
    • 3.插入排序(Insertion Sort)
    • 4.希尔排序(Shell Sort)
    • 5.归并排序(Merge Sort)
    • 6.快速排序(Quick Sort)
    • 7.堆排序(Heap Sort)
    • 8.计数排序(Counting Sort)
    • 9.基数排序(Radix Sort)
    • 10.桶排序(Bucket Sort)
  • 三、 稳定性
  • 四、时空复杂度

十大排序是在计算机地界儿最常用和最重要的排序算法,分别是:冒泡、选择、插入、希尔、归并、快速、堆、计数、基数、桶。
速记:冒(帽)选插(差)希(西)归,快堆计(妓)基(鸡)桶。帽子都能给爷选差了,要你们有什么用?送你们回西天吧!来来来,快把这些吃闲饭的歌妓和小鸡都堆到桶里,拎到西天送给佛祖。

一、排序分类

按照排序的实现方式,十种排序算法可分为:
1.比较类排序:

  • 交换类:冒泡排序、快速排序。
  • 插入类:插入排序、希尔排序。
  • 选择类:选择排序、堆排序。
  • 归并类:归并排序。

2.非比较类排序:计数排序、桶排序、基数排序。

二、排序思路

以从小到大排序为例,各排序算法思路如下。

1.冒泡排序(Bubble Sort)

将列表分为两部分,左无序,右有序。遍历时比较相邻两元素,顺序不对就交换,每遍历一次就能将无序列表中的最大元素逐步“冒泡”到列表的末尾。这样重复遍历无序列表,就能实现整个列表的排序。
时间复杂度:O(n2)

2.选择排序(Selection Sort)

左无序,右有序。每次从无序列表中选择最大值,放在最后(交换)。
时间复杂度:O(n2)

3.插入排序(Insertion Sort)

左有序,右无序。将无序列表第一个元素往前移动,放在第一个比它小的数的后边,从而得到新的有序列表。
时间复杂度:O(n^2)(对于大部分情况),O(n) 在最佳情况下(数据已接近有序)

4.希尔排序(Shell Sort)

是插入排序的一种改进版本,通过先比较距离较远的元素,再逐步缩小间隔进行插入排序。
插入排序的增量可视为1,在某些极端情况下效率较差。而希尔排序改为设立增量序列,按增量序列执行多次插入排序。
希尔排序的时间复杂度与增量序列的选取有关,一般用n除以2一直除到1的序列,但不是最优算法。
时间复杂度:取决于间隔序列的选择,通常为 O(n7/6)。

5.归并排序(Merge Sort)

采用分治法,先分后合。即先将列表分成两半分别排序,再合并已排序的两部分。
时间复杂度:O(n log n)。
空间复杂度:O(n)(需要额外的存储空间用于合并)

6.快速排序(Quick Sort)

采用分治法,在列表中选择一个基准值,然后分区(将列表分割成两部分,比基准值小的放在左侧,大的放在右侧),然后递归每个分区(即按上面的方面此这两部分数据分别进行快速排序)。
快速排序的基准值选择不当可能导致时间复杂度退化,解决办法有随机选值(随机选取基准值)、三数取中(头尾中,三数取中间值作为基准值)等。
时间复杂度:O(n log n)(平均情况),O(n^2)(最坏情况,但可以通过随机选择基准元素等方法改进)

7.堆排序(Heap Sort)

将无序部分构建成一个大顶堆,然后依次堆顶元素(最大值)与末尾元素交换,并重新调整堆结构。算法类似于选择排序。
时间复杂度:O(n log n)
空间复杂度:O(1)(原地排序/就地排序)

8.计数排序(Counting Sort)

适用于一定范围内的整数排序,通过计数元素出现的次数来确定每个元素在排序后的位置。
具体方法是借助数组下标有序,先存入数组并统计个数,再遍历赋值回原数组。
时间复杂度:O(n + k)(k 是待排序数据的范围)
空间复杂度:O(k)

9.基数排序(Radix Sort)

按位(从最低有效位到最高有效位或从最高有效位到最低有效位)对数字进行排序,通常使用计数排序作为子过程。
从最低有效位到最高有效位的基数排序,可以设立0~9十个桶数组,将待排序数按个位放入桶中,依次拿出,再按十位、百位,重复上述过程。
时间复杂度:O(n * k)(k 是数字的最大位数)
空间复杂度:O(n + k)(取决于使用的计数排序的空间需求)

10.桶排序(Bucket Sort)

将待排序数据分到有限数量的桶中,每个桶再分别排序(通常使用其他排序算法),然后依次合并各个桶中的数据。
也就是说,通过映射函数将待排序数据分组,对每个组选择合适的排序算法排序后,遍历每个桶,依次赋值回原数组。
时间复杂度:O(n + k)(k 是桶的数量,且每个桶中的数据均匀分布)
空间复杂度:O(n + k)

三、 稳定性

排序前如果a等于b,a在b的前面,排序后a仍在b的前面,则称该排序算法稳定。
稳定排序:冒泡排序、插入排序、归并排序、计数排序、桶排序、基数排序。
不稳定排序:快速排序、堆排序、选择排序、希尔排序。
速记:不稳定的排序有“快选堆希(吸)”。想象眼前是一堆堆的饮料,快选一堆来吸。

四、时空复杂度

十大排序的时空复杂度列表如下:
在这里插入图片描述

n表示待排序数据规模,k表示待排序数据范围,对数以2为底。


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

相关文章:

  • 注册中心如何选型?Eureka、Zookeeper、Nacos怎么选
  • [免费]微信小程序(高校就业)招聘系统(Springboot后端+Vue管理端)【论文+源码+SQL脚本】
  • TypeError: Cannot create a consistent method resolution order (MRO) for
  • 新冠肺炎服务预约微信小程序的设计与实现ssm+论文源码调试讲解
  • 【Unity精品插件】Love/Hate:专注于 AI 行为与情感互动
  • 1F1B 非交错式调度模式与 GPipe 策略的内存节省优势
  • 【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky
  • 用JSONEncoder解决Object of type Color is not JSON serializable报错
  • 【数据结构-堆】2233. K 次增加后的最大乘积
  • 【python】str.upper()、str.join()、stri.strip()用法
  • Java 项目中引入阿里云 OSS SDK
  • Pytorch使用手册-优化 Vision Transformer 模型以用于部署(专题十六)
  • ADB->查看进程并强杀进程
  • 【论文阅读】MAMBA系列学习
  • 小学校园安全用电 防触电设备功能介绍 #电不伤人,电不漏电#
  • 计算机组成原理(九):乘法器
  • 1.CSS的复合选择器
  • 基于Springboot+Vue的仓库管理系统
  • 【轻量级推荐算法框架】‌ReChorus‌ 是一个高效、可扩展的轻量级推荐算法框架
  • JavaScript-一份你的前端入门说明书(计算机专业)
  • 基于 Selenium 实现上海大学校园网自动登录
  • 关于在windows系统中编译ffmpeg并导入到自己项目中这件事
  • Proser:升级为简易的通讯调试助手软件