今天我们来实现二分查找,二分查找还算循环题里面一道比较有难度的题,今天我们就来看一下二分查找如何实现。

目录

原理图

流程图

语言简述


二分查找的前提条件:

1、数据必须有序

2、必须采取顺序存储(也就是数组,不能是链表)

好的,那我们先来看看原理图和流程图:

原理图

流程图

语言简述

现在我来简述一下二分查找的流程:

先将low赋值为0,然后将high赋值为数组的最大下标,(可以用sizeof计算),进入循环。

将循环条件设为low<=high,然后将mid值赋为(high+low)/2,将查找的值与arr[mid]进行比较,如果arr[mid]大于target就是在左半边,把high的值赋为mid-1,将high挪到mid的左边,(将high赋值为mid-1而不是high=mid,这样可以避免target的下标是最小值或最大值查找不到的情况,你或者可以这样想,因为arr[mid]已经不等于target了,还不如将直接将high移动到mid的左边,不必将high赋值为mid 的值,多此一举)。

如果arr[mid]小于target就是在右半边,即将low赋值为mid+1,直到arr[mid]的值等于target,我们就可以将mid的值给index并break循环,最后判断index是否等于-1,等于-1则就是没找到,不等于就输出index;

有人就想了,为什么要low<=high。首先,low>high就没有意义了,这肯定是判断为假的。然后就是low=high,这个条件是十分有用的,在C语言中这样除以2是会省略掉小数的,所以mid的值会小于或等于(low+high)/2真实的值,判断arr[mid]与target大小时,最后一步high、low、mid会处于重合的状态,因为mid总为high和low的中间值,是不可能跳出他们的,所以我们要保留low=high的情况,即最后一步来判断arr【mid】是否等于target,等于,则记录下mid的值。不等于就输出找不到了。

最后,附上二分查找的代码

#include <stdio.h>
int main()
{int target = 0;int index = -1;int arr[] = { 2,5,6,7,8,11,32,44,56,66,74,88,97 };//随便定义的一个有序数组scanf("%d", &target);int low = 0;     int high = sizeof (arr)/sizeof (arr[0])-1;//将high赋值为最大下标int  mid = 0;while (low <= high)              //结束条件:low>high结束循环{mid = (low+high) / 2;         //每次进入循环重新计算mid的值if (arr[mid] < target){low = mid+1;              //arr[mid]笑了,将low一道mid的右边一格}else if (arr[mid] > target){high = mid-1;             //arr[mid]大了,将high移到mid的左边一格}else{index = mid;              //将mid的值记录下来,接着就跳出循环break;}}if (index == -1){printf("没找到\n");}elseprintf("下标是:%d\n", index);return 0;
}

最后,都看到这了,希望大家评论留个赞呗~~

【二分查找】详细讲解(C语言折半查找)相关推荐

  1. c语言指针的折半法查找,数据结构笔记7:折半查找法(二分查找法)及C语言实现...

    折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 折半查找算法 对静态查找表{5,13,19,21,37,56, ...

  2. php折半查找算法,PHP如何实现折半查找算法

    本文主要介绍了PHP实现的折半查找算法,简单描述了折半查找的原理,并结合实例形式分析了php采用递归与非递归方式实现折半查找算法的相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 定义:折半查找 ...

  3. C语言折半查找法(超详细)

    折半查找法仅适用于对已有顺序的数组.数据进行操作!!!(从小到大)自我总结:折半查找法就是相当于(通过改变low或high的大小)把中间位置指到了key那个数那里,所以mid应该处于循环里面,即mid ...

  4. c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...

    数据结构(C语言版)--有序表查找(折半查找)(代码版) 数据结构(C语言版)--有序表查找(折半查找)(代码版) #include #include #define ERROR 0 #define ...

  5. C语言折半查找算法及代码实现

    1.折半查找的定义: 在计算机中,折半查找,也称二分搜索.它是一种在有序数组中查找某一特定元素的搜索算法. 2.折半查找的实现原理:  搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则 ...

  6. C语言——折半查找法

    一.使用场景 假如现在有一组数据,你想要查询这个具体某一个数据在这一堆数据中的所在位置,这个时候就需要程序在这一组数据中,找到与想要查找的目标数据相匹配的那个数据,然后返回相对应的位置.如果将问题再细 ...

  7. c语言折半查找输出坐标,用c语言编写折半查找法

    折半查找法又称为二分查找,是在一个有序数组里面找到一个具体的数,方法我在代码里注释到了. #include int binary_search(int *arr, int key, int sz)// ...

  8. c语言折半查找法找字符,C语言简单实现折半查找法

    近期研习C语言,谭浩强<C语言程序设计(第2版)>P167.6原题: 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值.如果该数不在数组 ...

  9. c语言折半查找法找字符,折半查找法(C语言)

    折半查找法(C语言) #include #define max 20 int binary(int x,int list[],int n)               /*从list[]中查找x*/ ...

  10. python语言折半查找_C语言折半查找 - 胡若晨的个人空间 - OSCHINA - 中文开源技术交流社区...

    /************************************************************************* > File Name: bin_searc ...

最新文章

  1. 一次 QPS 翻倍的 Java 服务性能优化
  2. mysql数据库c 操作o_linux下c操作mysql数据库。gcc报错。谁能帮忙看下啊。
  3. spark sql 上个月_SPARK-SQL内置函数之时间日期类
  4. C# WinForm只允许运行一个窗体实例
  5. python基础系列:类
  6. 使用nginx解决跨域问题
  7. RHEL5下源码配置LAMP全记录
  8. ElasticSearch搜索语法学习(term,filter,bool,terms,range)
  9. 直播电商在新商业环境下的价值分析
  10. botstrap-栅格布局与栅格偏移
  11. Spring boot (2)--- 基础
  12. hadoop框架分析
  13. MDN - API数组笔记
  14. 工业中常见的有塑胶模、五金冲压模、压铸模、吹塑模、挤塑模
  15. ubantu20刷新DNS缓存的命令
  16. 计算机中常用单位是什么意思,常用单位的换算(含温度、长度、计算机单位、面积以及数量级含义).doc...
  17. 2018的锅让2019来悲
  18. 学了python能找人吗_只学python能找工作吗
  19. 何帅:“在线”思考,王坚的云计算心理学
  20. NSX-T 恢复DFW策略

热门文章

  1. ccs 动态梦幻西游
  2. aix系统日志转存日志服务器,AIX查看系统日志
  3. 【服务器数据恢复】IBM服务器RAID控制器出错的数据恢复案例
  4. recovery.img 的解包与打包
  5. 趣图:说一说你不知道的世界
  6. 举个栗子!Tableau 技巧(194):用参数自定义排序控件
  7. 没有互联网,如何本地获取到LoRaWAN的终端数据?
  8. php内部网,php – WordPress内部网址重写是如何工作的?
  9. ISO8601标准时间格式
  10. 高登复习笔记之Http网络协议和Servlet