| |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| -> 数据结构与算法 -> 排序算法-堆排序-归并排序-快排 -> 正文阅读 |
|
|
[数据结构与算法]排序算法-堆排序-归并排序-快排 |
|
todo: 疑问:本文实现的快排的时间复杂度是O(n*log2(n))吗
tips
下面介绍集中排序算法的实现,从小到大排序 归并排序 O(n*log2(n))
递归地拆分列表,当拆分出来的列表只含有单个元素的时候,自然是有序的,可以作为递归的终止条件
堆排序堆的性质堆的实现通过构造二叉堆(binary
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。常见的堆有二叉堆、斐波那契堆等。
由此可知,大根堆的子树也是大根堆 用数组存一棵完全二叉树,通过下标获取某个已知节点的关联节点若数组下标从0开始
若数组下标从1开始
本文大根堆数组下标都从0开始 方案1 自底向上调整大根堆O(n^2)从最后一个非叶结点开始调整,让这个节点比后裔大,一直到root节点比后裔大,再将root节点放在末尾。 这样,最大的数就排在了数组的末尾。再把倒数第二大的数字,放在数组倒数第二的位置,依此类推。
方案2 自顶向下调整大根堆O(n*log2(n))先构建一个大根堆(每一个节点都大于等于后裔),把root和数组末尾的值交换,再自顶向下调整(末尾这个数字已经是确保是最大值,因此下一次大根堆的数组不包括原来数组基础上的末尾元素)
快排 O(n*log2(n))主要用到了基准元素和双指针,以及递归思想
快排草图
|
|
|
|
|
| 上一篇文章 下一篇文章 查看所有文章 |
|
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
| 360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年12日历 | -2025/12/1 13:50:52- |
|
| 网站联系: qq:121756557 email:121756557@qq.com IT数码 |