1.小根堆如果根是儿童的存在留下的根值左孩子小于值;如果根是儿童的权利的存在的根值比他们的孩子的权利少值。2.大根堆如果根是儿童的存在留下的根值多名离开自己的孩子值。子女则根节点的值大于右子女的值。3.结论(1)堆是一棵全然二叉树(假设公有h层,那么1~h-1层均满,在h层连续缺失若干个右叶子)。(...
分类:
编程语言 时间:
2015-07-18 13:49:08
阅读次数:
179
排序可分为两种:内排序和外排序。在排序过程中,全部记录存放在内存,称为内排序;如果排序过程中需要使用外存,则成为外排序。
内排序有以下几类:
插入类排序:直接插入排序、二分法(折半)插入排序、希尔(缩小增量)排序
选择类排序:简单选择排序、堆排序
交换类排序:冒泡排序、快速排序、三路划分的快速排序
归并类排序:二路归并排序
基数类排序:MSD基数排序、LSD基数排序
各种内部排序算法的比较直接插入...
分类:
编程语言 时间:
2015-07-18 11:09:15
阅读次数:
165
堆排序是一种树形选择排序,是对直接选择排序的有效改进。
堆是一种数据结构,其定义:任何一个非叶结点的值,都不大于(或不小于)其左右孩子结点的值。若父亲大孩子小,则这样的堆叫做大顶堆;若父亲小孩子大,则这样的堆叫做小顶堆。顾名思义,大顶堆的根结点的值是最大的,小顶堆的根结点的值是最小的。基本思想首先,将一个无序序列调整为大顶堆(小顶堆),我们就找到了这个无序序列的最大(或最小)值,然后将这个值交换到...
分类:
编程语言 时间:
2015-07-18 11:03:33
阅读次数:
142
堆排序算法原理 堆排序算法,就是利用二叉树的原理,我们知道,对于二叉树而言,具有一定的排序性质: 如 左节点是小于根节点的值,右节点的值肯定是大于根节点的值的,因此, 我们算是快能找到某一个元素 因为如果当前元素比要找的元素要大,那么就往右走,如果当前元素比要找的元素要小,那么往右找,呵呵,相 信如...
分类:
编程语言 时间:
2015-07-17 20:54:24
阅读次数:
278
写这个的目的在于,说明快速排序的灵活运用。我们来看下关于快速排序中的一部分关键代码:快速排序代码:int a[101],n;//定义全局变量,这两个变量需要在子函数中使用 void quicksort(int left,int right) { int i,j,t,temp; if(left>rig...
分类:
编程语言 时间:
2015-07-17 20:50:46
阅读次数:
258
#ifndef HEAP_SORT_H#define HEAP_SROT_H#includevoid maxHeap(int *arr,unsigned int Length); void maxHeap(int *arr,unsigned int rootIndex,unsigned int he...
分类:
编程语言 时间:
2015-07-17 20:42:27
阅读次数:
189
unsigned int的表示今天在写堆排序的时候遇到一个BUGvoid builMaxHeap( int *arr,unsigned int heapSize){ unsigned int i; for(i=heapSize/2-1; i>=0;--i){ std::cout=0;--i){上面换...
分类:
其他好文 时间:
2015-07-17 20:38:16
阅读次数:
136
堆排序相对冒泡这些要复杂一些,它需要先初始化堆。.net里List的排序就混合使用了堆排序和快速排序。出于学习目的,代码示范里不使用数组结构,数组比较深涩。而使用嵌套类来实现。1.初始化堆排序肯定是有升序和降序两种,堆排序也一样,分为大顶堆和小顶堆。初始化堆的目的就是变为大顶堆或者小顶堆传统的方法是...
分类:
编程语言 时间:
2015-07-17 20:34:48
阅读次数:
200
这一节决策树其实是对前面的堆排序,快排等是最优的比较算法的证明, 首先说下《算法导论》上对决策树的定义:一棵决策树是一棵满二叉树(注意看下面解释),表示某排序算法作用于给定输入所做的所有比较,而控制结构,移动等都被忽略了。 注意:这里个人认为定义是错误的,决策树不是一棵满二叉树,连完全二叉树都不是。...
分类:
其他好文 时间:
2015-07-17 00:10:39
阅读次数:
242