随笔分类 - 算法
摘要:递归的使用条件: 存在一个递归调用的终止条件; 每次递归的调用必须越来越靠近这个条件;只有这样递归才会终止,否则是不能使用递归的!总之,在你使用递归来处理问题之前必须首先考虑使用递归带来的好处是否能补偿 他所带来的代价!否则,使用迭代算法会比递归算法要高效。递归的基本原理: 1 每一次函数调用都会有一次返回.当程序流执行到某一级递归的结尾处时,它会转移到前一级递归继续执行. 2 递归函数中,位于递归调用前的语句和各级被调函数具有相同的顺序.如打印语句 #1 位于递归调用语句前,它按照递归调用的顺序被执行了 4 次. 3 每一级的函数调用都有自己的局部变量. 4 递归函数中,位于递归调用语句后的
阅读全文
摘要:10.1.2.3 插值查找(Interpolation Search ) 先来看一个实际问题:我们在一本英汉字典中寻找单词“worst”,我们决不会仿照对半查找(或Fibonacci查找)那样,先查找字典中间的元素,然后查找字典四分之三处的元素等等. 事实上,我们是在所期望的地址(在字典的很靠后的地方)附近开始查找的,我们称这样的查找为插值查找. 可见,插值查找不同于前面讨论的几种查找算法,前面介绍的查找算法是基于严格比较的,即假定我们对线性表中元素的分布一无所知(或称没有启发式信息). 然而实际中,很多查找问题所涉及的表满足某些统计的特点.插值查找在实际使用时,一般要满足两个假设条件:(1)
阅读全文
摘要:通俗理解: 想象你在水底吹气,气泡是不是向上冒?你扔一块石头到水里,它是不是往下沉。冒泡排序法就是利用这样的原理, 把大的数往地下沉,把较小的数往上冒。例子: 例如有以下n=4个数 56 1 4。我们把它竖着放,变成 5 6 1 4。 我们将第一个数5和第二个数6比,5比6小,所以不用换;接着将6和1比,因为6比1重,所以6往下沉,1往上冒, 变成 5 1 6 4。 接着拿6和4比,因为6比1重,所以6往下沉,4往上冒,变成 5 1 4 6。 这样我们就把最大那个数沉到底了,接下来进行第二次同样操作把倒数第二大的数沉到倒数第二个位置上去。 5和1比,5下沉,1往上冒,变成 1 5 4 6。 然
阅读全文
摘要:快速排序代码如下:View Code 1 #include<iostream> 2 using namespace std; 3 int a[10001]; 4 void qs(int s,int e) //s=star ; e = end 5 { 6 int x=a[s],l=s,r=e;//以第一个数为参照做比较 7 if(l>=r) return; //只剩下一个元素,不满足递归基线条件 8 while(l<r){ //从高位开始比较 9 while(l<r&&a[r]>=x) r--; //不用交换元素的话,不断从高位往低位减少10
阅读全文
浙公网安备 33010602011771号