堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序 ...
分类:
编程语言 时间:
2018-07-02 18:18:17
阅读次数:
667
科班出身的程序员就应该研究些算法和数据结构类的东西,不然和高中生有什么区别? 堆排序,结构是完全二叉树,其原理与冒泡排序类似,每次选出一个最大(或最小的元素),然后下一轮在除去这个元素后的序列中再选出一个极值,以此类推,直到序列不能构成二叉树为止。 原理解析: 给定一个列表array=[16,7,3 ...
分类:
编程语言 时间:
2018-07-01 20:28:33
阅读次数:
190
堆分为大顶堆,和小顶堆。 什么是堆? 堆可以看成是一棵二叉树,二叉树的元素是一个数组不断的从左到右轮训放置。如果是大顶堆,则大的数放上面一层,小的数放下面一层。上一层的数,一定大于下一层的数。小顶堆则相反。 那么,如何实现一个大顶堆?这里我用一个链表来实现。 实现堆很简单,只要牢记他的原理就行了。 ...
分类:
编程语言 时间:
2018-07-01 14:52:11
阅读次数:
168
死磕算法之二分查找法 死磕算法之选择排序 死磕算法之插入排序 死磕算法之快速排序 死磕算法之堆排序 死磕算法之希尔排序 死磕算法之冒泡排序 持续更新中。。。。。。。。。。。。 死磕算法之二分查找法 死磕算法之选择排序 死磕算法之插入排序 死磕算法之快速排序 死磕算法之堆排序 死磕算法之希尔排序 死磕 ...
分类:
编程语言 时间:
2018-06-30 23:42:51
阅读次数:
187
学习更多算法系列请参考文章:死磕算法之汇总篇 堆排序主要是运用了二叉树的性质来进行的排序。 在进行堆排序之前我们先了解一下二叉树的几个性质: 1.在排序使用二叉树的时候我们要排序的数组的第0个位置其实是不可以用的,这个时候如果我们要排序的数组为[3,1,0,2,8,4,2]时,我们首先要把它变为[0 ...
分类:
编程语言 时间:
2018-06-29 22:55:53
阅读次数:
218
原题网址:https://www.lintcode.com/problem/sort-integers-ii/description 描述 给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。 描述 描述 给一组整数,按照升序排序。使用归并排序,快 ...
分类:
编程语言 时间:
2018-06-29 00:06:34
阅读次数:
160
1.插入排序和归并排序是稳定的,选择排序,希尔排序,快速排序,堆排序都是不稳定的。 2. 3.快速排序是最快的通用排序算法。 4.如果稳定性很重要而空间又不是问题,归并排序可能是最好的。 ...
分类:
编程语言 时间:
2018-06-28 17:36:12
阅读次数:
106
堆概念: 是一种完全二叉树结构,分为大根堆和小根堆,每一个非叶子节点都大于(大根堆是大于,小根堆事小于)它的两个子节点。 堆排序:步骤分为三步: 1 :初始化大根堆(小根堆也可以,本篇以大根堆为例) 2:交换堆顶最大值和数组最后一位, 3:交换位置后的堆进行大根堆调整 4:循环进行2步骤,交换堆顶和 ...
分类:
编程语言 时间:
2018-06-27 20:07:03
阅读次数:
201
1、所有排序类型 直接插入排序 2路插入排序 希尔排序 快速排序 简单选择排序 树形选择排序 堆排序 归并排序 多关键字排序 链式基数排序 2、直接插入排序 3、2路插入排序 4、希尔排序 5、快速排序 6、简单选择排序 7、树形选择排序 8、堆排序 9、归并排序 10、多关键字排序 11、链式基数 ...
分类:
编程语言 时间:
2018-06-27 00:53:34
阅读次数:
177
思想 把数组当做二叉树来排序: 索引0是树的根节点; 除根节点外,索引为N的节点的父节点索引是(N 1)/2; 索引为N的节点的左子节点索引是 2 N+1; 索引为N的节点的右子节点索引是 2 N+2; 代码 工作过程 待画图 性能分析 时间复杂度:最好、平均、最坏都是 O(nlogn) 空间复杂度 ...
分类:
编程语言 时间:
2018-06-24 18:03:41
阅读次数:
194