摘要: 递归的使用条件: 存在一个递归调用的终止条件; 每次递归的调用必须越来越靠近这个条件;只有这样递归才会终止,否则是不能使用递归的!总之,在你使用递归来处理问题之前必须首先考虑使用递归带来的好处是否能补偿 他所带来的代价!否则,使用迭代算法会比递归算法要高效。递归的基本原理: 1 每一次函数调用都会有一次返回.当程序流执行到某一级递归的结尾处时,它会转移到前一级递归继续执行. 2 递归函数中,位于递归调用前的语句和各级被调函数具有相同的顺序.如打印语句 #1 位于递归调用语句前,它按照递归调用的顺序被执行了 4 次. 3 每一级的函数调用都有自己的局部变量. 4 递归函数中,位于递归调用语句后的 阅读全文
posted @ 2011-04-09 17:15 jnje 阅读(1966) 评论(0) 推荐(0) 编辑
摘要: 10.1.2.3 插值查找(Interpolation Search ) 先来看一个实际问题:我们在一本英汉字典中寻找单词“worst”,我们决不会仿照对半查找(或Fibonacci查找)那样,先查找字典中间的元素,然后查找字典四分之三处的元素等等. 事实上,我们是在所期望的地址(在字典的很靠后的地方)附近开始查找的,我们称这样的查找为插值查找. 可见,插值查找不同于前面讨论的几种查找算法,前面介绍的查找算法是基于严格比较的,即假定我们对线性表中元素的分布一无所知(或称没有启发式信息). 然而实际中,很多查找问题所涉及的表满足某些统计的特点.插值查找在实际使用时,一般要满足两个假设条件:(1) 阅读全文
posted @ 2011-03-12 11:33 jnje 阅读(789) 评论(0) 推荐(0) 编辑
摘要: 一、实参类型与形参类型不匹配时,实参类型自动转化为形参类型Return 语句 返回数据的类型 与 函数类型 不匹配时,自动转化为函数的类型 函数声明: 事先通知编译系统,可以不写形参名。 float add(float, float);二、Skills编程时把main函数写到最前,每次需调用函数时都要写 函数原型 来声明函数。例如如此声明函数: void swap(int, int);三、关于参数的类型 指针作为函数参数 声明时:void swap(int *p1, int *p2); 调用时: swap(pointer_1, pointer_2); 一维数组地址 作函数参数,用指针变量去接受 阅读全文
posted @ 2011-03-11 23:50 jnje 阅读(1136) 评论(0) 推荐(0) 编辑
摘要: 内存分配和释放函数malloc,calloc,realloc,freemalloc()函数:分配内存空间 (m-memory)void *malloc(size_t size) 其中的size即为所用分配的内存空间的大小。malloc函数有一个将可用的内存块连接为一个长长地列表即空闲链表。调用malloc函数的时候,它将沿着连接表寻找一个足以满足用户要求的内存块。calloc:分配内存空间并刷新void *calloc(size_t nitems, size_t size);Allocates the requested memory and returns a pointer to it. 阅读全文
posted @ 2011-03-10 13:31 jnje 阅读(3954) 评论(2) 推荐(0) 编辑
摘要: 如果是重复做某一操作,用循环语句。有三种:一、for( 表达式①; 表达式②; 表达式③) { ……}二、do { ……}while(表达式①);三、while(表达式①) { ……} 先执行语句,再判断用: do { …… }while(表达式①); 先判断能否执行,再执行语句用: while(表达式①) { …… } 或者用: for(;表达式①;) { }各循环语句间的转化:do {}while() 和 for(;;)之间的转化: 1.do {语句1;} while(表达式1); 2.for(;;){ 语句1; if(!表达式1) break; }do {} while() 和 whil 阅读全文
posted @ 2011-03-09 22:36 jnje 阅读(218) 评论(0) 推荐(0) 编辑
摘要: 通俗理解: 想象你在水底吹气,气泡是不是向上冒?你扔一块石头到水里,它是不是往下沉。冒泡排序法就是利用这样的原理, 把大的数往地下沉,把较小的数往上冒。例子: 例如有以下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。 然 阅读全文
posted @ 2011-03-09 14:05 jnje 阅读(342) 评论(0) 推荐(0) 编辑
摘要: 快速排序代码如下: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 阅读全文
posted @ 2011-03-07 21:48 jnje 阅读(323) 评论(0) 推荐(0) 编辑