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

【算法】排序算法汇总1

1. 冒泡排序:
思路:进行相邻比较后,每一轮将最值移动到一端;

平均时间复杂度:需要进行n-1轮,内层有n/2次的可能交换,合计是O(n²);

最坏时间复杂度:需要进行n-1轮,内层每次有n-1-i(i是当前轮)的交换次数,合计是O(n²);

最优情况:是一个原本就有序的数组,O(n);

空间复杂度:原地交换,O(1);

稳定排序;

2. 鸡尾酒排序(双向冒泡排序):

思路:以冒泡排序的思路,从左端冒到右端,再从右端冒到左端,对两端有序更好;

平均时间复杂度:n个元素就要比较n-1轮,每次平均要比较n/2个元素,合计是O(n²);

最坏时间复杂度:比较n-1轮,每次需要比较n-1-i次(i是当前轮),合计是O(n²);
最优情况:同冒泡排序最优情况,一个原本就有序的数组,O(n);

空间复杂度:原地交换,O(1);

稳定排序;

3. 快速排序
思路:选出一个基准数,然后根据基准数将当前的数组分为大于组和小于组;

平均时间复杂度:分的轮次约为O(logn),每轮平均要比较(n-i)/2(i是当前轮),合计是O(nlogn);

最坏时间复杂度:每次都只挑选到边缘的位置,无法将一个数组根据基准数分成两份,所以递归的高度会变成n轮,合计为O(n²);
空间复杂度:这里的空间复杂度为函数的引用占用,它直接与栈的深度相关,即平均为O(logn),最坏是O(n);

不稳定排序;

4. 堆排序
思路:先进行建堆,之后进行堆内调整以达到有序,分为最大堆和最小堆;
建堆:采用Floyd建堆法,只遍历大约一半的节点,每个节点的操作成本不同,约合计为O(n);

时间复杂度:无最好和最坏的差别,需要提取n次,每次复杂度为O(logn),合计为O(nlogn);
空间复杂度:在原堆中操作,为O(1);
不稳定排序;

5. 计数排序
前提:键值是整数,且范围有限;
流程:1. 统计每个数的出现频次,时间复杂度为O(n);2. 计算每个键的起始输出位置(累计位置),复杂度为O(k);3. 再遍历一遍排序好的数组,时间复杂度为O(n);

时间复杂度:合计为O(n + k);
空间复杂度:用于存放的值的空间大小,合计为O(k);

当k与n的数量级差不多时,会让排序更快;
累计位置的方式可以稳定排序;


6. 桶排序
前提:需要被排序的值均匀地被分配在区间内;

流程:1. 建立b个桶,时间复杂度为O(b),扫描所有的元素并分配到桶内时间复杂度为O(n);2. 分别对桶的内部进行排序;3. 按桶的顺序输出桶内的每个元素;
期望时间复杂度:假设要被排序的数组均匀分布,桶数b与n同阶,即在同一个数量级:

        桶内的排序若用的是时间复杂度为O(n²)的排序算法,那么合计的时间复杂度为b*O((n/b)²) = O(n²/b), 在此假设b约等于n,那么最后的结果为O(n);

        桶内的排序若用的是时间复杂度为O(nlogn)的排序算法,那么合计的时间复杂度为b*O((n/b)log(n/b)) = O(n²/b), 在此假设b约等于n,那么最后的结果为O(n);

最坏的时间复杂度:所有的元素都堆在一个桶内,合计为O(n²);

是否稳定取决于桶内的排序算法是否是稳定的

http://www.dtcms.com/a/519465.html

相关文章:

  • 学习笔记 | 图论基础
  • 苏州要服务网站建设视频网站建设多少钱
  • Flink 使用 RocksDB 作为状态后端存储的原因详解
  • 历经一载编程路,褪去青涩踏新程
  • 面试随想录4:吉贝克后端
  • 使用Python操作你的手机(Appium入门)
  • Spire.Doc 实践指南:将Word 文档转换为 XML
  • 【2B篇】阿里通义 Qwen3-VL 新增 2B、32B 两个模型尺寸,手机也能轻松运行
  • 目标检测YOLO实战应用案例100讲-基于多模态和多模型融合 的三维目标检测
  • 【成长纪实】从“Hello World”到分布式实战的进阶之路
  • 图论理论基础(1)
  • 开源 Linux 服务器与中间件(十)Mqtt协议和Emqx服务器安装测试
  • 网站建设实践鉴定手机网站建设讯息
  • 网站管理文档怎么写晚上睡不着看点害羞的东西app
  • uni-app 广告弹窗最佳实践:不扰民、可控制频次、含完整源码
  • 使用eNSP模拟器搭建网络拓扑结构(笔记2):从 0 到 1 掌握华为网络仿真
  • UniApp 多页面编译优化:编译时间从10分钟到1分钟
  • C++变量与函数命名规范技术指南 (基于华为编码规范与现代C++最佳实践)
  • ELK1——elasticsearch
  • 【图像卷积基础】卷积过程卷积实现通道扩充与压缩池化Pooling原理和可视化
  • 杭州公司网站设计外贸手工做兼职的网站
  • 深入浅出Langchain4j——构建Java大语言模型应用的新范式
  • Babylon.js学习之路《添加自定义摇杆控制相机》
  • 【JAVA 进阶】SpringBoot集成Sa-Token权限校验框架深度解析
  • 【CMakeLists.txt】Qt6 依赖配置详解
  • 用js做网站登录网页成品
  • 数据库安全网关:从“看得见访问”到“控得住风险”的关键一层
  • 对泊松过程的理解
  • 【数论】质数筛(埃氏筛、欧拉筛)
  • 扩展名网站兰州做网站一咨询兰州做网站公司