一、原理 ? 堆排序是采用数据结构堆进行排序的算法。堆是一种近似完全二叉树的结构,并同时满足堆的性质:子节点的键值或索引总是小于(或大于)它的父节点。 ? 堆中定义以下几种操作: ? 1) 最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于父节点 。 ? 2) 创建最大 ...
分类:
编程语言 时间:
2019-02-27 01:27:13
阅读次数:
225
源码实现: 运行结果: 算法理解: 1. 性能方面抽离最大值需要n数量级的循环,每次循环中heap的构建复杂度log(n),综合是nlog(n)的量级; 2. 算法的总体思想是,构建最大堆->找到最大值->剩下的进一步构建最大堆->再找次最大....依次递归; ...
分类:
编程语言 时间:
2019-02-23 17:11:35
阅读次数:
199
排序算法有很多种,并在实际编程过程中用的非常广泛。常用的排序算法有:插入排序算法,选择排序算法,冒泡排序算法,快速排序算法,归并排序算法,希尔排序算法,堆排序算法。
分类:
编程语言 时间:
2019-02-21 09:46:42
阅读次数:
150
链表排序(冒泡、选择、插入、快排、归并、希尔、堆排序) 用到的链表结构如下所示: 一、直接交换结点 1、直接插入排序【时间复杂度:O(n^2),空间复杂度:O(1)】 插入排序的基本思想:将待排序表看作是左、右两部分,其中左边为有序区,右边为无序区;整个排序过程就是将右边无序区中的记录依次按关键字大 ...
分类:
编程语言 时间:
2019-02-20 13:08:36
阅读次数:
183
十大经典排序算法 主题: 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序。 O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。 希尔排序。 线性阶 (O(n)) 排序 基数排 ...
分类:
编程语言 时间:
2019-02-18 01:24:12
阅读次数:
199
二分查找,import bisect 堆排序,import heapq 哈希算法,import hashlib 压缩,lzma 图形处理,PIL 处理xml文件,PyXML 多媒体操作,PyMedia Xpath处理,from lxml import etree ...
分类:
编程语言 时间:
2019-02-17 23:34:56
阅读次数:
219
第一次了解到堆排序 和完全二叉树有关 详情见代码 关于堆的建立 小顶堆 父节点小于子结点 大顶堆 父节点大于子结点 ...
分类:
其他好文 时间:
2019-02-17 16:43:27
阅读次数:
177
不会其他排序的小金羊~~又来水题了~~ 本题我的思路:堆排,速度不需要算很快,AC就可以... 注意:初学者不宜抄此代码(压行严重) code: cpp include include include //调用优先队列请使用 using namespace std; //对于这道题,我们使用堆排序 ...
分类:
其他好文 时间:
2019-02-15 21:14:59
阅读次数:
227
排序有很多种但是 就看你会哪一种了! 选择排序 O(𝑛2) 插入排序 O(𝑛2) 冒泡排序 O(𝑛2) 计数排序 O(𝑛 + 𝑚) 基数排序 O (𝑛 log 𝑚) 桶排序 O(𝑛)~O(𝑛2) 归并排序 O(𝑛 log 𝑛)堆排序 O(𝑛 log 𝑛)快速排序 O(𝑛 ...
分类:
编程语言 时间:
2019-02-15 19:40:40
阅读次数:
198
堆排序的基本思想(小顶堆) 1) 先将初始排列关键字序列(R1,R2...,Rn-1,Rn)构成小顶堆,此堆为初始的无序区.(这里是从最后一个非叶结点向前进行赛选) 2)将堆顶元素R1与最后一个元素Rn交换,此时得到新的无序区(R1,R2...,Rn-1)和新的有序区(Rn),并且Rn小于无序区所有 ...
分类:
编程语言 时间:
2019-01-30 21:51:59
阅读次数:
190