c语言二分法查找次数,二分法查找
二分法查找
算法:二分法查找适用于数据量较大,但是数据需要先排好序
(1)确定该区间的中间位置k
(2)将查找的值T与array[k]进行比较。若相等,查找成功返回此位置;否则确定新的查找区域,继续二分查找。区域确定如下:a.array[k]>T 由数组的有序性可知array[k,k+1,……,high]>T;故新的区间为array[low,……,K-1]b.array[k]
算法复杂度分析
时间复杂度
1.最坏情况查找最后一个元素Master定理T(n)=T(n/2)+O(1)所以T(n)=O(log2n)
2.最好情况查找中间元素O(1)查找的元素即为中间元素(奇数长度数列的正中间,偶数长度数列的中间靠左的元素)
3.取最坏和最好的平均查找次数得出T(n)=O(logn)
空间复杂度
1.S(n)=n
算法c语言实现
//递归算法
int recurbinary(int *a, int key, int low, int high)
{
int mid;
if(low > high)
return -1;
mid = (low + high)/2;
if(a[mid] == key) return mid;
else if(a[mid] > key)
return recurbinary(a,key,low,mid -1);
else
return recurbinary(a,key,mid + 1,high);
}
//非递归算法
int binary( int *a, int key, int n )
{
int left = 0, right = n - 1, mid = 0;
mid = ( left + right ) / 2;
while( left < right && a[mid] != key )
{
if( a[mid] < key ) {
left = mid + 1;
} else if( a[mid] > key ) {
right = mid;
}
mid = ( left + right ) / 2;
}
if( a[mid] == key )
return mid;
return -1;
}
int main()
{
int a[] = {1,2,3,4,5,6,7,8,9,12,13,45,67,89,99,101,111,123,134,565,677};
int b[] = {677,1,7,11,67};
int i;
for( i=0; i
{
//printf( "%d\n", recurbinary(a, b[i],0,sizeof(a)/sizeof(a[0])-1) );
printf( "%d\n", binary( a, b[i], sizeof(a)/sizeof(a[0])));
}
return 0;
}
c语言二分法查找次数,二分法查找相关推荐
- 查找:对于长度为n的线性表最坏查找次数
查找:对于长度为n的线性表最坏查找次数 顺序查找 ----------------------------------n 查找最大项和最小项--------------------n-1 二分查找法- ...
- 使用哈希函数:H(k)=3k MOD 11,并采用链地址法处理冲突。试对关键字序列(22,41,53,46,30,13,01,67)构造哈希表,求等概率情况下查找成功的查找长度,并设计构造哈希表
使用哈希函数:H(k)=3k MOD 11 ,并采用链地址法处理冲突. 试对关键字序列(22,41,53,46,30,13,01,67)构造哈希表, 求等概率情况下查找成功的查找长度,并设计构造哈希表 ...
- 二分法在数组内查找数c语言,C++二分法在数组中查找关键字的方法
本文实例讲述了C++二分法在数组中查找关键字的方法.分享给大家供大家参考.具体如下: /* 此程序演示了二分法查找算法(针对按从小到大排列的数组)的实现. */ #include using name ...
- python实现二分法查找_python3 二分法查找
''' 二分法查找 有序列表 掐头去尾取中间 查找列表中xx在不在列表中,在,则返回索引值 ''' # lst = [1, 4, 6, 8, 9, 21, 23, 26, 35, 48, 49, 54 ...
- 数据结构与算法笔记(十二)—— 查找算法(顺序查找、二分法查找)
搜索是在一个项目集合中找到一个特定项目的算法过程.搜索通常的答案是真的或假的,因为该项目是否存在.搜索的几种常见方法:顺序查找.二分法查找.二叉树查找.哈希查找 一.顺序查找 最基本的查找技术,过程: ...
- 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)
查找: 给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败 查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序 动态查找表:查找的同时做修改操作( ...
- java 二分查找_Java二分法查找
1 假设有一个数组[1, 3, 5, 6, 23, 300],要从中找到23 2 有多种方法完成这个任务 (1)我们可以从小到大按顺序一个一个的对比,直到找到目标数字,或者反过来 (2)从中间开始查找 ...
- php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)
//php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的 $abs=array(1,12,13,114,115,116,117,118); //z查找数组的最大下标 $hight = coun ...
- 二分法查找和普通查找
一.普通查找 对于数组和一个需要查找的元素来说,普通查找的原理很简单,即为从数组的第一个元素到最后一个元素进行遍历,如果第i个元素的值等于我们需要查找的值,那么返回找到的角标i,否则返回-1表示没有查 ...
最新文章
- js中的SetTimeOut
- windows 域用户账号验证登陆
- 网工协议基础(2) TCP/IP四层模型
- noj一道简单的数学题
- SSY and JLBD
- mysql驱动连接不了mariadb_无法从振动应用程序连接到MySQL / MariaDB数据库
- 一文看懂网络上采样层中的 align_corners
- 直播预告丨原厂专家解析MySQL的性能管理
- mysql可以登陆sqlyog1862_MySQL错误号码1862:your password has expired
- 易到实际控制人温晓东成老赖:与贾跃亭曾是盟友 如今反目
- 梦三国解析服务器spl文件头失败怎么解决,梦三国 卡顿问题的解决方法
- 实战案例!使用 Python 进行 RFM 客户价值分析!
- 微信7.0.10正式版来了!朋友圈斗图彻底关闭了!
- 记载一次cesium加载近景天空盒的例子
- dd 0x7ffe0000_当您尝试启动网站时出现“意外的错误0x8ffe2740”错误信息
- 惊呼——SVM支持向量机三重境界!
- es bulk java_es v6.8.3 bulk 异常
- 22,Horizontal Pod Autoscaler(HPA),自动扩缩容
- wordpress修改了站点地址导致无法打开网站的解决办法
- SQL查询即将合同即将到期的员工
热门文章
- 发现一位大佬的算法刷题笔记PDF
- 读完《Effective Java》后,总结了 50 条开发技巧
- 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
- 「图解」ThreadLocal 在并发问题中的应用
- 开发人员如何解决Linux性能优化之痛?
- 上银伺服驱动器接线图_伺服驱动器实际接线方法详解
- matlab mlpkginstall,Matlab选择mingw编译器
- ‘shared_ptr‘ is not a member of ‘std’
- python 笛卡尔积,排列,组合
- task ':app:compileDebugJavaWithJavac'.错误