选择排序 冒泡排序 插入排序 希尔排序 堆排序 ...
分类:
编程语言 时间:
2016-04-24 18:52:10
阅读次数:
217
对《大话数据结构》P396~P406—堆排序,进行了自己的理解并完善了代码。 一、堆排序之前需要掌握以下知识 1、完全二叉树 例如下图这样的,编号出现空档,就不是完全二叉树。 2、完全二叉树的性质 这三个性质中最重要的是1,看图就很好理解,即如果i>1,i的双亲节点是i/2。 3、堆 4、堆的性质 ...
分类:
编程语言 时间:
2016-04-24 15:45:24
阅读次数:
253
堆排序 概念: 第一个非叶子节点: 小于size/2的部分; 非叶子节点的区间: [0, size/2); (注意是左闭右开) 最大堆:满足父节点head, arr[head]<=arr[2*head+1] && arr[head]<=arr[2*head+2] 非叶子节点的子树才需要调整(没有子节 ...
分类:
编程语言 时间:
2016-04-24 14:14:40
阅读次数:
254
关于堆排序算法的思想,网上有很多介绍,这里不再解释,这里提供了两个Java类,读者可以把类潜入到自己的程序中,直接调用,免去了重新编写堆排序的过程。 分为两个堆排序接口,一个是数组从下标1开始存储的堆排序类Duisort1,另一个是从下标0开始存储的堆排序类Duisort2,具体的Java代码如下: ...
分类:
编程语言 时间:
2016-04-23 15:02:10
阅读次数:
243
#pragma once #include using namespace std; /*返回节点i的父结点*/ int Parent(int i) { if (i void Swamp(T &a, T &b) { T temp; temp = a; a = b; b = temp; } /*维护最... ...
分类:
编程语言 时间:
2016-04-23 13:22:26
阅读次数:
194
注意:使用小根堆排序后是递减数组,要得到递增数组,可以使用大根堆。 在堆排序好后再添加元素,需要重新建堆并且排序。 由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上前面建立堆时N / 2次向下调整,每次调整时间复杂度也为O(logN)。二次操作时间相加还是O(N ...
分类:
编程语言 时间:
2016-04-23 11:45:07
阅读次数:
173
阿里巴巴2016研发工程师笔试选择题
1.将整数数组(7-6-3-5-4-1-2)按照堆排序的方式原地进行升序排列,请问在第一轮排序结束之后,数组的顺序是_____。...
分类:
编程语言 时间:
2016-04-22 19:41:33
阅读次数:
177
堆排序与快速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法。学习堆排序前,先讲解下什么是数据结构中的二叉堆。
二叉堆的定义
二叉堆是完全二叉树或者是近似完全二叉树。
二叉堆满足二个特性:
1.父结点的键值总是大于或等于(小于或等于)任何一个子节点的键值。
2.每个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆)。
当父结点的键值总...
分类:
编程语言 时间:
2016-04-22 19:40:49
阅读次数:
188