算法笔记--八个常见排序算法总结

简介: 一、 分类描述 1. 插入排序           直接插入排序:算法简单,稳定,适用于数据量小的情况          希尔排序:直接插入排序的改进版,不稳定,对于待排序序列的不同情况效率相近 2.


一、 分类描述

1. 插入排序

          直接插入排序:算法简单,稳定,适用于数据量小的情况

         希尔排序:直接插入排序的改进版,不稳定,对于待排序序列的不同情况效率相近

2. 交换排序

          冒泡排序:算法简单,稳定,在数据基本有序的情况下效率较高

         快速排序:算法效率高,不稳定,需要额外的辅助空间

3. 选择排序

         直接选择排序:任何情况时间复杂度均为O(n^2),不稳定,其优势在于交换次数少

         堆排序:不稳定,对序列的原始顺序不敏感,适用于数据量大的情况

4. 归并排序

          分治策略,稳定,适用于待排序列整体无序、部分有序的情况,需要额外的辅助空间

5. 基数排序

          稳定;适用范围有限;当数据位数较小时,时间复杂度近似为O(n),效率高于其它的稳定性排序算法

二、总结比较表

类别

排序方法

时间复杂度

空间复杂度

稳定性

复杂性

最好

最坏

平均

插入排序

直接插入

O(n)

O(n^2)

O(n^2)

O(1)

O

简单

希尔排序

O(n^1.3)

O(n^2)

O(n^1.x)

O(1)

X

较复杂

交换排序

冒泡排序

O(n)

O(n^2)

O(n^2)

O(1)

O

简单

快速排序

O(nlogn)

O(n^2)

O(nlogn)

O(logn)

X

较复杂

选择排序

直接选择

O(n^2)

O(n^2)

O(n^2)

O(1)

X

简单

堆排序

O(nlogn)

O(nlogn)

O(nlogn)

O(1)

X

较复杂

 

归并排序

O(nlogn)

O(nlogn)

O(nlogn)

O(n)

O

较复杂

 

基数排序

O(d(n+r))

O(d(n+r))

O(d(n+r))

O(n+r)

O

较复杂


目录
相关文章
|
5月前
|
存储 搜索推荐 算法
加密算法、排序算法、字符串处理及搜索算法详解
本文涵盖四大类核心技术知识。加密算法部分介绍了对称加密(如 AES)、非对称加密(如 RSA)、哈希摘要(如 SHA-2)、签名算法的特点及密码存储方案(加盐、BCrypt 等)。 排序算法部分分类讲解了比较排序(冒泡、选择、插入、归并、快排、堆排序)和非比较排序(计数、桶、基数排序)的时间复杂度、适用场景及实现思路,强调混合排序的工业应用。 字符串处理部分包括字符串反转的双指针法,及项目中用正则进行表单校验、网页爬取、日志处理的实例。 搜索算法部分详解了二分查找的实现(双指针与中间索引计算)和回溯算法的概念(递归 + 剪枝),以 N 皇后问题为例说明回溯应用。内容全面覆盖算法原理与实践
200 0
|
算法
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
【❤️算法笔记❤️】-每日一刷-19、删除链表的倒数第 N个结点
272 1
|
10月前
|
存储 搜索推荐 算法
算法系列之排序算法-堆排序
堆排序(Heap Sort)是一种基于堆数据结构的比较排序算法。它的时间复杂度为 $O(nlogn)$,并且是一种原地排序算法(即不需要额外的存储空间)。堆排序的核心思想是利用堆的性质来维护一个最大堆或最小堆,然后逐步将堆顶元素(最大值或最小值)取出,放到数组的末尾,最终得到一个有序的数组。
271 8
算法系列之排序算法-堆排序
|
算法 索引
❤️算法笔记❤️-(每日一刷-141、环形链表)
❤️算法笔记❤️-(每日一刷-141、环形链表)
180 0
|
算法
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
【❤️算法笔记❤️】-(每日一刷-876、单链表的中点)
173 0
|
9月前
|
JavaScript 前端开发 算法
JavaScript 中通过Array.sort() 实现多字段排序、排序稳定性、随机排序洗牌算法、优化排序性能,JS中排序算法的使用详解(附实际应用代码)
Array.sort() 是一个功能强大的方法,通过自定义的比较函数,可以处理各种复杂的排序逻辑。无论是简单的数字排序,还是多字段、嵌套对象、分组排序等高级应用,Array.sort() 都能胜任。同时,通过性能优化技巧(如映射排序)和结合其他数组方法(如 reduce),Array.sort() 可以用来实现高效的数据处理逻辑。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
算法 API 计算机视觉
人脸识别笔记(一):通过yuface调包(参数量54K更快更小更准的算法) 来实现人脸识别
本文介绍了YuNet系列人脸检测算法的优化和使用,包括YuNet-s和YuNet-n,以及通过yuface库和onnx在不同场景下实现人脸检测的方法。
571 1
|
算法
❤️算法笔记❤️-(每日一刷-160、相交链表)
❤️算法笔记❤️-(每日一刷-160、相交链表)
136 1
|
JSON 算法 数据可视化
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
这篇文章是关于如何通过算法接口返回的目标检测结果来计算性能指标的笔记。它涵盖了任务描述、指标分析(包括TP、FP、FN、TN、精准率和召回率),接口处理,数据集处理,以及如何使用实用工具进行文件操作和数据可视化。文章还提供了一些Python代码示例,用于处理图像文件、转换数据格式以及计算目标检测的性能指标。
319 0
测试专项笔记(一): 通过算法能力接口返回的检测结果完成相关指标的计算(目标检测)
|
数据可视化 搜索推荐 Python
Leecode 刷题笔记之可视化六大排序算法:冒泡、快速、归并、插入、选择、桶排序
这篇文章是关于LeetCode刷题笔记,主要介绍了六大排序算法(冒泡、快速、归并、插入、选择、桶排序)的Python实现及其可视化过程。
253 0