对于这一类排序,我觉得先要弄懂其排序思想,可以通过看一些书籍或者文章(算法导论不错),在此基础上 要自己能够总结写出算法的伪代码,即使环境和条件改变,特别是一时不好下手写代码时很有必要先写下算法 伪代码,然后具体实现,时而看看写写,此类算法就能信手拈来。 快速排序是基于分治模式的。下面是算法导论中对...
分类:
编程语言 时间:
2014-11-28 01:01:42
阅读次数:
314
1、二叉树的定义
二叉树(Binary Tree)是一种特殊的树型结构,每个节点至多有两棵子树,且二叉树的子树有左右之分,次序不能颠倒。
由定义可知,二叉树中不存在度(结点拥有的子树数目)大于2的节点。二叉树形状如下下图所示:
2、二叉树的性质
(1)在二叉树中的第i层上至多有2^(i-1)个结点(i>=1)。备注:^表示此方
(2)深度为k的二叉树至多有2^...
分类:
编程语言 时间:
2014-11-26 11:32:59
阅读次数:
342
Toplogical Sort
拓扑排序是对有向图的顶点的一种排序,它使得如果存在一条从Vm到Vn的路径,那么在排序中Vn出现在Vm后面。
如果图含有圈,或者初始入度没有为0的节点,那么拓扑排序是不可能完成的。
理论介绍去看或者《算法导论》,老话,这里还是介绍如何实现。
tls.h
/***********************...
分类:
编程语言 时间:
2014-11-25 14:33:51
阅读次数:
265
队列的基本操作包括入队enqueue和出队dequeue,队列有队头head和队尾tail指针。元素总是从队头出,从队尾入。采用数组实现队列时候,为了合理利用空间,可以采用循环实现队列空间的有效利用。
...
分类:
编程语言 时间:
2014-11-24 22:36:08
阅读次数:
325
栈和队列都是动态集合,元素的出入是规定好的。栈规定元素是先进后出(FILO),队列规定元素是先进先出(FIFO)。栈和队列的实现可以采用数组和链表进行实现。在标准模块库STL中有具体的应用,可以参考http://www.cplusplus.com/reference/。
栈的基本操作包括入栈push和出栈pop,栈有一个栈顶指针top,指向最新如栈的元素,入栈和出栈操作操作都是从栈顶端进...
分类:
编程语言 时间:
2014-11-24 10:11:18
阅读次数:
155
文章来自网络加课本:
本次学习的内容讨论的问题是在一个由n个不同数值构成的集合中选择第i个顺序统计量问题。主要讲的内容是如何在线性时间内O(n)时间内在集合S中选择第i小的元素,最基本的是选择集合的最大值和最小值。一般情况下选择的元素是随机的,最大值和最小值是特殊情况,书中重点介绍了如何采用分治算法来实现选择第i小的元素,并借助中位数进行优化处理,保证最坏保证运行时间是线性的O(n)。...
分类:
编程语言 时间:
2014-11-22 09:21:35
阅读次数:
286
举个来说明桶排序的过程,假设现在有A={0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68},桶排序如下所示:
研究过计数排序我们知道了————计数排序是假设输入是由一个小范围内的整数构成,而桶排序则假设输入由一个随机过程产生的,该过程将元素均匀而独立地分布在区间[0,1)上。当桶排序的输入符合均匀分布时,即可以线性期望时间运行。...
分类:
编程语言 时间:
2014-11-19 11:08:36
阅读次数:
312
计数排序假设n个输入元素中的每一个都介于0和k之间的整数,k为n个数中最大的元素。当k=O(n)时,计数排序的运行时间为θ(n)。计数排序的基本思想是:对n个输入元素中每一个元素x,统计出小于等于x的元素个数,根据x的个数可以确定x在输出数组中的最终位置。此过程需要引入两个辅助存放空间,存放结果的B[1...n],用于确定每个元素个数的数组C[0...k]。算法的具体步骤如下:
(1)根据输...
分类:
编程语言 时间:
2014-11-17 09:17:02
阅读次数:
225