算法小结--二分搜索
2016-05-20 17:37
253 查看
二分搜索:
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
二分搜索在实践中往往可以替代第二个内循环,提高算法效率
算法实现
实例:求方程 5*x*x+7.3*x+5=20.88 的解
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
二分搜索在实践中往往可以替代第二个内循环,提高算法效率
算法实现
//KEY为要查找的值 left为搜索左边界,right为搜索右边界 void binaryReserch(int left,int right) { int mid; while(left<right) { mid = (left+right)/2; if( mid == KEY ) return; if( mid > KEY ) right = mid; else left = mid+1; } }
实例:求方程 5*x*x+7.3*x+5=20.88 的解
#include <stdio.h> #include <stdlib.h> #define EXP(x) 5*x*x+7.3*x+5 //a*x*x + b*x +c = 20.88 求满足有四位小数的x float binaryReserch(float begin,float end) //[begin,end] { float mid; while(begin<=end) //出口是begin和end的大小 { mid = (begin+end)*0.5; if(EXP(mid)-20.88<0.001 && EXP(mid)-20.88>-0.001) //满足条件 return mid; if(EXP(mid)-20.88 >0.0001) { end = mid; //改变end的值 }else { begin = mid + 0.0001; //改变begin的值 } } return -1; } int main() { float res; res = binaryReserch(0.0,100.0); printf("%.4f\n",res); return 0; }
相关文章推荐
- 书评:《算法之美( Algorithms to Live By )》
- 动易2006序列号破解算法公布
- Ruby实现的矩阵连乘算法
- C#插入法排序算法实例分析
- 超大数据量存储常用数据库分表分库算法总结
- C#数据结构与算法揭秘二
- C#冒泡法排序算法实例分析
- 算法练习之从String.indexOf的模拟实现开始
- C#算法之关于大牛生小牛的问题
- C#实现的算24点游戏算法实例分析
- c语言实现的带通配符匹配算法
- 浅析STL中的常用算法
- C++二分查找在搜索引擎多文档求交的应用分析
- 算法之排列算法与组合算法详解
- C++实现一维向量旋转算法
- Ruby实现的合并排序算法
- C#折半插入排序算法实现方法
- 基于C++实现的各种内部排序算法汇总
- C++线性时间的排序算法分析
- C++实现汉诺塔算法经典实例