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

常见的排序算法,复杂度

  • 稳定 / 非稳定排序:两个相等的数 排序前后 相对位置不变。
  • 插入排序(希尔排序):
    • 每一趟将一个待排序记录,按其关键字的大小插入到已排好序的一组记录的适当位置上,直到所有待排序记录全部插入为止。稳定,O(n),O(1)。
    • 把记录按下标增量(模)分组,对每组进行直接插入排序,每次排序后减小增量,当增量减至 1 时排序完毕。不稳定,不知道(有个实验结论),O(1)。
  • 冒泡排序:
    • 比较相邻的元素,如果第一个比第二个大就进行交换,对每一对相邻元素做同样的工作。稳定,O(n),O(1)。
  • 选择排序:
    • 每次在未排序序列中找到最小元素,和未排序序列的第一个元素交换位置,再在剩余未排序序列中重复该操作,直到所有元素排序完毕。不稳定,O(n),O(1)。
  • 桶排序:
    • 将数组分到有限数量的桶里(比如按照十进制最高位,分到10个桶里),每个桶分别排序(可能使用别的排序算法,也可能递归桶排序),然后把排序好的桶连接起来。
    • 稳定。桶数量 = 数据量时,O(N),O(N)。桶数量 = 2,完全递归桶排序,O(NlogN),O(N)。
  • 归并排序:
    • 将待排序序列分成两部分,先对两部分 分别递归排序,然后进行合并。稳定,O(nlogn),O(n)。
  • 堆排序:
    • 堆是一种完全二叉树,最大值堆:子节点均小于父节点,最小值堆:子节点均大于父节点。
    • 插入:放在完全二叉树最后一点,一直往上升。
    • 删除:取出根节点,最后一点升顶,往下降。
    • 不稳定,O(nlogn),O(1)(树状数组)。
  • 快速排序:
    • 随机选择一个基准元素,通过一趟遍历 将要排序的数据分割成两部分,一部分全部小于等于基准元素,一部分全部大于等于基准元素,继续对两部分递归快排。不稳定,O(nlogn),O(1)。
    • 最优:每一次选基准元素都恰好选到中位数,⼆叉树的层数(logn)即为递归需要进⾏的次数,并且每轮递归结束时,都将⼆叉树遍历了⼀遍(n),O(nlogn)。
    • 最差:数组完全倒序,每次都选到最大的作基准,O(n^2)。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • jail子系统里升级Ubuntu focal到jammy
  • XML 验证器:确保数据完整性和准确性的关键工具
  • 如何查看极狐GitLab Helm Chart?
  • 用Pytorch实现线性回归(Linear Regression with Pytorch)
  • 基于luckysheet实现在线电子表格和Excel在线预览
  • 防火墙NAT地址转换和智能选举综合实验
  • 代谢组数据分析(十五):基于python语言构建PLS-DA算法构建分类模型
  • LLM-阿里 DashVector + langchain self-querying retriever 优化 RAG 实践【Query 优化】
  • springboot系列教程(一):简介与入门案例(含源码)
  • html5——CSS列表样式属性
  • django报错(一):python manage.py makemigrations,显示“No changes detected”
  • android的跨进程通讯方式
  • Qt窗口程序整理汇总
  • 【D3.js in Action 3 精译】第二章 DOM 的操作方法
  • 大语言模型 API
  • Babel配置的不完全指南
  • javascript数组去重/查找/插入/删除
  • MySQL的数据类型
  • react-core-image-upload 一款轻量级图片上传裁剪插件
  • vagrant 添加本地 box 安装 laravel homestead
  • 闭包--闭包之tab栏切换(四)
  • 道格拉斯-普克 抽稀算法 附javascript实现
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 仿天猫超市收藏抛物线动画工具库
  • 将 Measurements 和 Units 应用到物理学
  • 聊聊hikari连接池的leakDetectionThreshold
  • 面试总结JavaScript篇
  • 使用SAX解析XML
  • 异常机制详解
  • 怎么把视频里的音乐提取出来
  • Nginx实现动静分离
  • Semaphore
  • ​iOS安全加固方法及实现
  • #{}和${}的区别?
  • #知识分享#笔记#学习方法
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (十六)视图变换 正交投影 透视投影
  • (四) 虚拟摄像头vivi体验
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)eclipse内存溢出设置 -Xms212m -Xmx804m -XX:PermSize=250M -XX:MaxPermSize=356m
  • (自适应手机端)响应式服装服饰外贸企业网站模板
  • ./indexer: error while loading shared libraries: libmysqlclient.so.18: cannot open shared object fil
  • .gitignore文件设置了忽略但不生效
  • .NET C# 使用 iText 生成PDF
  • .NET Framework、.NET Core 、 .NET 5、.NET 6和.NET 7 和.NET8 简介及区别
  • .NET MAUI Sqlite数据库操作(二)异步初始化方法
  • .NET+WPF 桌面快速启动工具 GeekDesk
  • .net6Api后台+uniapp导出Excel
  • .Net8 Blazor 尝鲜
  • .NET上SQLite的连接
  • .NET下ASPX编程的几个小问题