【二分查找】详细讲解(C语言折半查找)
今天我们来实现二分查找,二分查找还算循环题里面一道比较有难度的题,今天我们就来看一下二分查找如何实现。
目录
原理图
流程图
语言简述
二分查找的前提条件:
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语言折半查找)相关推荐
- c语言指针的折半法查找,数据结构笔记7:折半查找法(二分查找法)及C语言实现...
折半查找,也称二分查找,在某些情况下相比于顺序查找,使用折半查找算法的效率更高.但是该算法的使用的前提是静态查找表中的数据必须是有序的. 折半查找算法 对静态查找表{5,13,19,21,37,56, ...
- php折半查找算法,PHP如何实现折半查找算法
本文主要介绍了PHP实现的折半查找算法,简单描述了折半查找的原理,并结合实例形式分析了php采用递归与非递归方式实现折半查找算法的相关操作技巧,需要的朋友可以参考下,希望能帮助到大家. 定义:折半查找 ...
- C语言折半查找法(超详细)
折半查找法仅适用于对已有顺序的数组.数据进行操作!!!(从小到大)自我总结:折半查找法就是相当于(通过改变low或high的大小)把中间位置指到了key那个数那里,所以mid应该处于循环里面,即mid ...
- c语言折半查找输出坐标,数据结构(C语言版)——有序表查找(折半查找)(代码版)...
数据结构(C语言版)--有序表查找(折半查找)(代码版) 数据结构(C语言版)--有序表查找(折半查找)(代码版) #include #include #define ERROR 0 #define ...
- C语言折半查找算法及代码实现
1.折半查找的定义: 在计算机中,折半查找,也称二分搜索.它是一种在有序数组中查找某一特定元素的搜索算法. 2.折半查找的实现原理: 搜索过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则 ...
- C语言——折半查找法
一.使用场景 假如现在有一组数据,你想要查询这个具体某一个数据在这一堆数据中的所在位置,这个时候就需要程序在这一组数据中,找到与想要查找的目标数据相匹配的那个数据,然后返回相对应的位置.如果将问题再细 ...
- c语言折半查找输出坐标,用c语言编写折半查找法
折半查找法又称为二分查找,是在一个有序数组里面找到一个具体的数,方法我在代码里注释到了. #include int binary_search(int *arr, int key, int sz)// ...
- c语言折半查找法找字符,C语言简单实现折半查找法
近期研习C语言,谭浩强<C语言程序设计(第2版)>P167.6原题: 有15个数按由大到小顺序存放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中第几个元素的值.如果该数不在数组 ...
- c语言折半查找法找字符,折半查找法(C语言)
折半查找法(C语言) #include #define max 20 int binary(int x,int list[],int n) /*从list[]中查找x*/ ...
- python语言折半查找_C语言折半查找 - 胡若晨的个人空间 - OSCHINA - 中文开源技术交流社区...
/************************************************************************* > File Name: bin_searc ...
最新文章
- 一次 QPS 翻倍的 Java 服务性能优化
- mysql数据库c 操作o_linux下c操作mysql数据库。gcc报错。谁能帮忙看下啊。
- spark sql 上个月_SPARK-SQL内置函数之时间日期类
- C# WinForm只允许运行一个窗体实例
- python基础系列:类
- 使用nginx解决跨域问题
- RHEL5下源码配置LAMP全记录
- ElasticSearch搜索语法学习(term,filter,bool,terms,range)
- 直播电商在新商业环境下的价值分析
- botstrap-栅格布局与栅格偏移
- Spring boot (2)--- 基础
- hadoop框架分析
- MDN - API数组笔记
- 工业中常见的有塑胶模、五金冲压模、压铸模、吹塑模、挤塑模
- ubantu20刷新DNS缓存的命令
- 计算机中常用单位是什么意思,常用单位的换算(含温度、长度、计算机单位、面积以及数量级含义).doc...
- 2018的锅让2019来悲
- 学了python能找人吗_只学python能找工作吗
- 何帅:“在线”思考,王坚的云计算心理学
- NSX-T 恢复DFW策略