二分法查找

算法:二分法查找适用于数据量较大,但是数据需要先排好序

(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语言二分法查找次数,二分法查找相关推荐

  1. 查找:对于长度为n的线性表最坏查找次数

    查找:对于长度为n的线性表最坏查找次数 顺序查找 ----------------------------------n 查找最大项和最小项--------------------n-1 二分查找法- ...

  2. 使用哈希函数: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)构造哈希表, 求等概率情况下查找成功的查找长度,并设计构造哈希表 ...

  3. 二分法在数组内查找数c语言,C++二分法在数组中查找关键字的方法

    本文实例讲述了C++二分法在数组中查找关键字的方法.分享给大家供大家参考.具体如下: /* 此程序演示了二分法查找算法(针对按从小到大排列的数组)的实现. */ #include using name ...

  4. python实现二分法查找_python3 二分法查找

    ''' 二分法查找 有序列表 掐头去尾取中间 查找列表中xx在不在列表中,在,则返回索引值 ''' # lst = [1, 4, 6, 8, 9, 21, 23, 26, 35, 48, 49, 54 ...

  5. 数据结构与算法笔记(十二)—— 查找算法(顺序查找、二分法查找)

    搜索是在一个项目集合中找到一个特定项目的算法过程.搜索通常的答案是真的或假的,因为该项目是否存在.搜索的几种常见方法:顺序查找.二分法查找.二叉树查找.哈希查找 一.顺序查找 最基本的查找技术,过程: ...

  6. 【数据结构和算法笔记】线性表的查找(平均查找长度,二分法,判定树)

    查找: 给定一个值k,在含有n个元素的表中找出关键字等于k的元素,若找到,则查找成功,否则,查找失败 查找前首先确定(1)存放数据的数据结构是什么(2)元素是否有序 动态查找表:查找的同时做修改操作( ...

  7. java 二分查找_Java二分法查找

    1 假设有一个数组[1, 3, 5, 6, 23, 300],要从中找到23 2 有多种方法完成这个任务 (1)我们可以从小到大按顺序一个一个的对比,直到找到目标数字,或者反过来 (2)从中间开始查找 ...

  8. php折半查找算法,php二分法查找(也叫折半查找)算法 (数组必须是从小到大的)

    //php二分法查找(也叫折半查找)算法/ 数组必须是从小到大的 $abs=array(1,12,13,114,115,116,117,118); //z查找数组的最大下标 $hight = coun ...

  9. 二分法查找和普通查找

    一.普通查找 对于数组和一个需要查找的元素来说,普通查找的原理很简单,即为从数组的第一个元素到最后一个元素进行遍历,如果第i个元素的值等于我们需要查找的值,那么返回找到的角标i,否则返回-1表示没有查 ...

最新文章

  1. js中的SetTimeOut
  2. windows 域用户账号验证登陆
  3. 网工协议基础(2) TCP/IP四层模型
  4. noj一道简单的数学题
  5. SSY and JLBD
  6. mysql驱动连接不了mariadb_无法从振动应用程序连接到MySQL / MariaDB数据库
  7. 一文看懂网络上采样层中的 align_corners
  8. 直播预告丨原厂专家解析MySQL的性能管理
  9. mysql可以登陆sqlyog1862_MySQL错误号码1862:your password has expired
  10. 易到实际控制人温晓东成老赖:与贾跃亭曾是盟友 如今反目
  11. 梦三国解析服务器spl文件头失败怎么解决,梦三国 卡顿问题的解决方法
  12. 实战案例!使用 Python 进行 RFM 客户价值分析!
  13. 微信7.0.10正式版来了!朋友圈斗图彻底关闭了!
  14. 记载一次cesium加载近景天空盒的例子
  15. dd 0x7ffe0000_当您尝试启动网站时出现“意外的错误0x8ffe2740”错误信息
  16. 惊呼——SVM支持向量机三重境界!
  17. es bulk java_es v6.8.3 bulk 异常
  18. 22,Horizontal Pod Autoscaler(HPA),自动扩缩容
  19. wordpress修改了站点地址导致无法打开网站的解决办法
  20. SQL查询即将合同即将到期的员工

热门文章

  1. 发现一位大佬的算法刷题笔记PDF
  2. 读完《Effective Java》后,总结了 50 条开发技巧
  3. 一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
  4. 「图解」ThreadLocal 在并发问题中的应用
  5. 开发人员如何解决Linux性能优化之痛?
  6. 上银伺服驱动器接线图_伺服驱动器实际接线方法详解
  7. matlab mlpkginstall,Matlab选择mingw编译器
  8. ‘shared_ptr‘ is not a member of ‘std’
  9. python 笛卡尔积,排列,组合
  10. task ':app:compileDebugJavaWithJavac'.错误