当给定一个有序数组,而我们要在这个数组中查找某个数时,我们常常用从头到尾的排除法遍历寻找,但是这种方式及其低效,n个数的数组最差要找n次。而后面我们会知道,二分查找法则高效的多,最差要找log以2为低n的对数次,即如果有2^32个数,最差查32次就可得到结果。

所谓二分法,就是先用数组中间的数去和查找的数作比较,我们可以知道中间的数是大于还是小于要查的数,这样就能消去一般的数,而我们怎么去得到中间数的地址呢,我们应该使用查找区域最左边的地址和最右边的地址的平均数作为新的中间值的地址,之后再去比较,重复多次直到得出结果,下面我们用程序体会这种思想。

#define _CRT_SECURE_NO_WARNINGS 1//scanf所需
#include<stdio.h>
int main()
{int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//给出一个特定的数列int a = 0;int left = 0;int right = 0;printf("请输入一个要查找的数\n");scanf("%d", &a);//输入一个想要查找的数aint b = sizeof(arr) / sizeof(arr[0]);left = 0;//left即左地址,地址最先是0right = b-1;//right即右地址,地址为长度-1int mid = (left + right) / 2;//求左右地址的平均值给mid,mid即为中间地址while (left<=right) {//左右地址向中间逼近,左地址与右地址交错,则找不到aif (arr[mid]< a) {//中间值在a左left = mid + 1;//左地址对应数值及其左侧数值全部无效,将左地址更新为左地址相邻右侧地址mid = (left + right)/2;//重新计算中间地址}else if (arr[mid]>a) {//中间值在a右right = mid - 1;//右地址对应数值及其右侧数值全部无效,将右地址更新为右地址相邻左侧地址mid = (left + right)/2;//重新计算中间地址}else if(arr[mid] == a) {printf("找到了,地址是:%d", mid);break;}else {printf("没有找到");}}return 0;
}

由以上程序可以看出,每次直接去中间值地址,用中间值与所查值比较,消去一半区域得到新的区间,在重新计算新区间的中间值地址,利用循环不断比较,左右地址不断向所查数字地址逼近,最终汇聚到一起,即为所查数的地址,若左右两地址想交错,则没有想查的数字

【C语言】用二分查找法在有序数组中查找具体的某个数相关推荐

  1. 有序数组中查找数字的范围

    有序数组中查找数字的范围 如题所示: 思路 源代码如下: 如题所示: 统计一个数字在排序数组中出现的次数 思路 使用二分查找,分别找到数字的下边界和上边界 源代码如下: class Solution ...

  2. 循环有序数组中查找某个数

    循环有序数组中查找某个数 利用二分查找,  一个循环有序数组从中间切分,一定分成一个有序数组和一个循环有序数组,由于循环有序数组不容易判断,我们只需判断哪一边是有序数组以及target是不是在有序数组 ...

  3. 使用二分查找向一个有序数组中插入一个数据

    折半查找法找到一个元素在数组中的下标* @param arr 数组* @param key 要查找的元素* @return 找到则返回元素在数组中的下标,如果没找到,则返回这个元素在有序数组中的位置* ...

  4. java 对象查找_Java如何从数组中查找对象元素?

    在Java中,如何从数组中查找对象元素? 示例 以下示例使用Contains方法来搜索数组中的String对象. package com.yiibai; import java.util.*; pub ...

  5. (java)leetcode852 山脉数组的封顶索引(二分查找法找出数组中最大值的下标)(Peak Index in a Mountain Array)

    题目描述: 我们把符合下列属性的数组 A 称作山脉: A.length >= 3 存在 0 < i < A.length - 1 使得A[0] < A[1] < ... ...

  6. 在一亿个数的有序数组中查找一个数所用时间

    #include<iostream> #include<cstdlib> #include<ctime> #define M 100000000 #define r ...

  7. C语言实现埃拉托色尼筛选法(剔除数组中的非质数)

    质数就是只能被1和本身整除的数.Eratosthenes筛选法是一种计算质数的有效方法. 这个算法的第一步就是写下所有从2至某个上限之间的所有整数. 在算法的剩余部分,遍历整个列表并剔除所有不是质数的 ...

  8. 二分查找:在有序数组中搜索大于等于x的数的最小下标

    标准的二分查找,大家可能都已经能记在脑海里了,但是稍微变形一下,可能就会出问题. 本文写了一个二分查找算法,并且做了一个测试的脚手架,用二分查找和普通算法的结果进行比较来验证算法的正确性. 1 #in ...

  9. C语言100题练习计划 45——在数组中查找指定元素

    名人说:古之立大事者,不惟有超世之才,亦必有坚忍不拔之志.--苏轼 进度:C/C++语言100题练习计划专栏,目前45/100

最新文章

  1. SSM整合Shiro 身份验证及密码加密简单实现
  2. mysql索引 钱缀_mysql字符串前缀索引
  3. MaxAlertView 强大的弹框试图
  4. 非自回归也能预训练:基于插入的硬约束生成模型预训练方法
  5. nginx和apache限制IP地址访问的设置方法
  6. cmap参数 plt_plt.imshow的参数有哪些?
  7. 操作系统实验读者写者程序源码_SAST Weekly | STM32F103系列开发板移植华为LiteOS操作系统...
  8. Jstatd命令(Java Statistics Monitoring Daemon)
  9. Panabit安装(二、Panabit安装)
  10. 【记录】jenkins 安装及环境配置(一)
  11. java商品列表展示_springMVC入门程序。使用springmvc实现商品列表的展示。
  12. kohana的modules集合
  13. 一文带你了解Java反射机制
  14. java正则替换数字_Java 正则表达式,替换图片名称,替换数字,和谐用语,复制文件...
  15. 68. 超越 Gzip 压缩
  16. 深圳大学计算机与软件学院自考,如何坐公交 或 地铁去深圳的深圳大学南校区计算机与软件学院自考办| Moovit...
  17. 实验吧CTF web刷题
  18. 独木舟上的旅行java_贪心算法--独木舟上的旅行
  19. Windows使用命令关闭一键关闭所有程序
  20. 【转载】 github vue 高星项目

热门文章

  1. 独立开发变现周刊(第83期):建在Stripe上的应用,年收入70万美元
  2. ERROR: Could not find com.android.tools.build:gradle:3.5.0. Searched in the following locations:
  3. 亚马逊的核心运营规律(我是做了3年亚马逊的)
  4. 从MUD到MMO——虚拟世界发展简史以及未来可能性的杂谈
  5. 编写Java程序,将文本文件(附件提供有example.txt)的内容以“行”为单位进行倒序排列,运行效果见下图所示。
  6. 鼠友题库每日百题(一)
  7. f_mkfs 使用用法示例
  8. SQL查询无限层级结构的所有下级,所有上级(即所有的子孙曾孙等等)
  9. 无限法则服务器选择吗,PlayStation 4内置存储空间不够?可使用移动固态硬盘外置拓展...
  10. 商机:颜值经济时代医美增量市场悄然开启 谁都想美成Angelababy