如果说希尔排序是简单插入排序的升级,堆排序是简单选择排序的升级,那么快速排序就是冒泡排序的升级了。相对于冒泡排序,快速排序增大了记录比较和移动的距离,将关键字较大的记录移动到后面,较小的移动到前面,从而减少总的比较和移动次数。快速排序的基本思想:通过每一趟排序都将待排序的记录按照选定的关键字分成两部...
分类:
编程语言 时间:
2014-12-22 10:51:47
阅读次数:
173
一、数组转换成堆 那么首先要解决的问题就是给数组排序,如何转换成二叉树的?转换方法如图:数组 int a[],包含元素a[0],a[1],a[2],a[3].....等等。转换成二叉树: 图还是比较形象的,其实就是依次从堆顶向下排,但是有一个原则,就是上一层没有排满的时候,下一层不会有元素...
分类:
编程语言 时间:
2014-12-16 18:38:04
阅读次数:
243
经典排序算法 - 堆排序Heap sort
堆排序有点小复杂,分成三块
第一块,什么是堆,什么是最大堆
第二块,怎么将堆调整为最大堆,这部分是重点
第三块,堆排序介绍
第一块,什么是堆,什么是最大堆
什么是堆
这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。
堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可...
分类:
编程语言 时间:
2014-12-16 13:35:14
阅读次数:
219
/* date:2014.12.15
堆结构:是一种树结构,准确说为完全二叉树。在这个树中,每个节点对应原始数据的一个记录,且满足一下条件:1.如果按照从小到大的顺序排序,要求非叶节点的数据要大于或等于其左右子节点的数据;2.如果按照从大到小的顺序排序,要求非叶节点的数据要小于或等于其左右子节点的数据。
堆排序思路:基于选择排序的思想,利用堆结构和二叉树的一些性质来完成数据的排序。
流程:1...
分类:
编程语言 时间:
2014-12-15 20:24:47
阅读次数:
226
堆排序和归并排序一样,时间复杂度为CodeCogsEqn(15),而且可以实现原址排序:任何时候都只需要常数个额外的元素空间存储临时数据。
分类:
编程语言 时间:
2014-12-13 23:06:21
阅读次数:
165
排序是数据结构的一种重要运算。本章的5.1节至5.6节介绍内排序的各种方法,5.7节介绍外排序方法。此外,堆排序也是一种典型的选择排序,有关堆排序的算法将在第8章中介绍。5.1基本概念在讨论排序的概念之前,首先引入排序码的概念。排序码是结点中的一个或多个字段,其值作为排序运算中的依据。排序码可以是关...
分类:
编程语言 时间:
2014-12-11 20:45:43
阅读次数:
183
原文: 一步一步写算法(之堆排序) 【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 堆排序是另外一种常用的递归排序。因为堆排序有着优秀的排序性能,所以在软件设计中也经常使用。堆排序有着属于自己的特殊性质,和二叉平衡树基本是一致的。打一个比方说,...
分类:
编程语言 时间:
2014-12-11 10:18:16
阅读次数:
225
我一向赞同一个理念: 用代码实现简单逻辑是不需要注释的, 因此我也就不写注释了, 直接上代码:#include #include #include inline int Parent (const int i){ return std::move( i % 2 ? (i - 1)...
分类:
编程语言 时间:
2014-12-10 07:04:13
阅读次数:
221