网站首页 > 文章精选 正文
作者 | 铁猴
责编 | 屠敏
出品 | CSDN 博客
简介
本文对常见排序算法进行总结。
排序算法
冒泡排序
该算法比较简单,几乎所有语言涉及到算法时,都会涉及到冒泡算法。
算法思路:
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
选择排序
每次选择一个最大(小)的,直到所有元素都被输出。
可参考:
https://blog.csdn.net/sun7545526/article/details/85165618
直接插入排序
插入排序的基本方法是:每一步将一个待排序的元素,按其排序码的大小,插入到前面已经排好序的一组元素的适当位置上去,直到元素全部插入为止
算法思路:
当插入第i(i >= 1)时,前面的V[0],V[1],……,V[i-1]已经排好序。这时,用V[I]的排序码与V[i-1],V[i-2],…的排序码顺序进行比较,找到插入位置即将V[i]插入,原来位置上的元素向后顺移。
以[21,25,49,25,16,08]为例,排序过程如下所示:
在小规模数据集或是基本有序时,该算法效率较高。
希尔排序
先对数据进行预处理,使其基本有序,然后再用直接插入排序算法排序。
详细过程可参考:
https://blog.csdn.net/eric_sunah/article/details/103080731
快速排序
利用“分而治之”的思想对集合进行排序
可参考:
https://blog.csdn.net/sun7545526/article/details/85165742
堆排序
说堆排序前,先说下啥是堆。
堆:堆是满足下列性质的完全二叉树:
每个节点都大于或是等于其左右孩子节点的值,称为大顶堆
每个节点都小于或是等于其左右孩子节点的值,称为小顶堆
接下来说下堆是如何做排序的,思路如下(以大顶堆为例):
根节点是整个堆的最大值,将它移走。
将剩余n-1个节点重新构造成一个堆,再将根节点移走
重复执行1,2。直到没有节点可移动,就生成了有序序列。
该算法有两个需要解决问题:
如何将一个无序序列构建一个堆。
移除根节点后,如何用剩余的节点重建堆。
详细介绍参见:
https://blog.csdn.net/eric_sunah/article/details/103081878
归并排序
归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。
详细介绍参见:
https://blog.csdn.net/eric_sunah/article/details/103082607
总结
分类总结:
时间复杂度总结:
版权声明:本文为CSDN博主「铁猴」加入原力计划的原创文章。
猜你喜欢
- 2025-06-24 算法基础:插入排序 实现原理和应用场景
- 2025-06-24 基础数据结构——八大排序详解(数据结构八种排序算法的思想)
- 2025-06-24 C#程序员必知:如何让你的代码跑得比火箭还快!深度优化实践指南
- 2025-06-24 数据结构与算法之道:解读常数、线性、对数时间复杂度!
- 2025-06-24 排序算法—快速排序(快速排序算法总结)
- 2025-06-24 Python高级排序算法应用(python3 排序算法)
- 2025-06-24 大数据高频面试题之算法题(大数据技术之高频面试题)
- 2025-06-24 用Python实现十大经典排序算法-插入、选择、快速、冒泡、归并等
- 2025-06-24 面试常考八股文及算法(一)(八股文的要求)
- 2025-06-24 技术分享:这可能最快的稳定排序算法
- 06-24PLC常用进制数及转换方法(plc中进制符号)
- 06-24PLC常用数制及转换方法,让你轻松掌握PLC编程
- 06-24PLC编程必看!5种常见进制数解析,搞懂才能玩转PLC!
- 06-24C数据类型——常量(c的数据类型及其定义方法)
- 06-24什么是二进制、八进制、十进制、十六进制?
- 06-24理论基础——十进制、二进制、十六进制、八进制
- 06-24搞不懂PLC中的高字节、低字位是啥?看完这篇文章就懂了!
- 06-242、进位制之间的转换(含有小数位)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)