1、堆的概念 堆排序依赖的数据结构是完全二叉树,要想是完全二叉树,前提必须是二叉树(废话),二叉树就要求父亲结点至多有两个孩子,即可以有一个、两个或者没有孩子。 完全二叉树则是在二叉树的基础上多了一些限制条件,那就是: 1、要么二叉树的每一层都是满的,即除叶子结点之外,其他结点都必须拥有左右孩子; ...
分类:
编程语言 时间:
2020-05-24 21:10:32
阅读次数:
66
最后结果为: 12123123232623排序前的数据为 :12 123 12323 26 23push_up 第1次 :12 123 12323 26 23push_up 第2次 :123 12 12323 26 23push_up 第3次 :12323 12 123 26 23push_up 第 ...
分类:
编程语言 时间:
2019-05-13 20:18:17
阅读次数:
137
一、原理 ? 堆排序是采用数据结构堆进行排序的算法。堆是一种近似完全二叉树的结构,并同时满足堆的性质:子节点的键值或索引总是小于(或大于)它的父节点。 ? 堆中定义以下几种操作: ? 1) 最大堆调整(Max Heapify):将堆的末端子节点作调整,使得子节点永远小于父节点 。 ? 2) 创建最大 ...
分类:
编程语言 时间:
2019-02-27 01:27:13
阅读次数:
225
堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子 ...
分类:
编程语言 时间:
2018-11-17 19:05:39
阅读次数:
140
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于 ...
分类:
编程语言 时间:
2018-09-07 14:19:09
阅读次数:
167
死磕算法之二分查找法 死磕算法之选择排序 死磕算法之插入排序 死磕算法之快速排序 死磕算法之堆排序 死磕算法之希尔排序 死磕算法之冒泡排序 持续更新中。。。。。。。。。。。。 死磕算法之二分查找法 死磕算法之选择排序 死磕算法之插入排序 死磕算法之快速排序 死磕算法之堆排序 死磕算法之希尔排序 死磕 ...
分类:
编程语言 时间:
2018-06-30 23:42:51
阅读次数:
187
学习更多算法系列请参考文章:死磕算法之汇总篇 堆排序主要是运用了二叉树的性质来进行的排序。 在进行堆排序之前我们先了解一下二叉树的几个性质: 1.在排序使用二叉树的时候我们要排序的数组的第0个位置其实是不可以用的,这个时候如果我们要排序的数组为[3,1,0,2,8,4,2]时,我们首先要把它变为[0 ...
分类:
编程语言 时间:
2018-06-29 22:55:53
阅读次数:
218
堆是一种特殊的完全二叉树,其特点是所有父节点都比子节点要小,或者所有父节点都比字节点要大。前一种称为最小堆,后一种称为最大堆。 比如下面这两个: 那么这个特性有什么作用?既然题目是堆排序,那么肯定能用来排序。想要用堆排序首先要创建一个堆,如果对4 3 6 2 7 1 5这七个数字做从小到大排序,需要 ...
分类:
编程语言 时间:
2017-05-10 17:54:30
阅读次数:
257
#include <iostream> void Swap(int &a,int &b){ int temp; temp = a; a = b; b = temp; } // 维护最小堆 void AdjustMinHeap(int *a,int pos,int len){ int temp,chi ...
分类:
编程语言 时间:
2017-04-24 22:50:15
阅读次数:
212
1、堆排序的堆,其实是一个 完全二叉树。既是一个结点要么是叶子结点,要么必定有左右两个子节点的树。 2、堆有序:每个结点的值,都必须大于两个子节点。但是两个子结点的大小不作要求。 3、一棵大小为N的完全二叉树,高度为lgN(层)。 用数组实现堆,假设数组下标从0开始,下标为k的元素,它的左子树是2k ...
分类:
编程语言 时间:
2016-12-09 22:11:12
阅读次数:
174