首页 > 编程语言 >【C语言】二分查找算法

【C语言】二分查找算法

时间:2023-07-28 15:01:56浏览次数:36  
标签:二分 arr int mid C语言 查找 else find

在⼀个升序的数组中查找制定的数字n,很容易想到的⽅法就是遍历数组,但是这种⽅法效率⽐较低, ⽐如我买了⼀双鞋,你好奇问我多少钱,我说不超过300元。你还是好奇,你想知道到底多少,我就让 你猜,你会怎么猜?你会1,2,3,4...这样猜吗?显然很慢;⼀般你都会猜中间数字,⽐如:150,然 后看⼤了还是⼩了,这就是⼆分查找,也叫折半查找。

值得注意的是:二分法只能用于有序数组。

#include <stdio.h>

int main()
{
 int arr[] = {1,2,3,4,5,6,7,8,9,10};
 int left = 0;
 int right = sizeof(arr)/sizeof(arr[0])-1;
 int key = 7;//要找的数字 
 int mid = 0;//记录中间元素的下标 
 int find = 0;
 while(left<=right)
 {
 		mid = left+(right-left)/2;
 //mid = (left+right)/2;为什么这么表达mid不好呢?
 if(arr[mid]>key)
 {
 right = mid-1;
 }
 else if(arr[mid] < key)
 {
 left = mid+1;
 }
 else

 {
 find = 1;
 break;
 }
 }
 if(1 == find )
 printf("找到了,下标是%d\n", mid);
 else

 printf("找不到\n");
}

在上放代码可以看出mid的表示有点不一样,为什么怎么写呢?

原因:

在整型里最大的值为INT_MAX,当左右都特别大时(相加之和超过了INT_MAX)就会发生错误。

【C语言】二分查找算法_C语言

最后希望在51cto与大家一起进步,也希望大佬能够指出我的不足。

标签:二分,arr,int,mid,C语言,查找,else,find
From: https://blog.51cto.com/u_16189938/6883226

相关文章

  • Windows | Linux 查找环境变量二进制所在目录
    1.Windows使用where命令wherejava2.Linux使用which命令whichjava......
  • Delphi 的 DBGrid 中的下拉列表和查找字段编程方法
    数据网格是非常流行的数据输入和显示形式,像大家熟悉的Excel、VFP 中的功能强大的BROWS 等,为广大程序员乐于采用。在用 Delphi 开发数据库应用系统时,利用数据网格DBGrid 输入数据时,有些字段只允许某几个固定的字符串,像档案案卷的保管期限,只有“永久”、“长期”和“短期”三种......
  • 单链表查找与删除
    单链表是一种常见的数据结构,它由一系列的节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。在单链表中,查找和删除节点是常见的操作。1.单链表查找:要查找单链表中的一个节点,需要从链表的头节点开始,沿着指针依次遍历每个节点,直到找到目标节点或者到达链表的末尾(即指针......
  • C语言快速排序及其优化操作
    快速排序原理简述:找到每一轮最大(最小)的数,依次从左到右存入新的数组,就完成了降序(升序)的排列。#include<stdio.h>intmain(void){intn;scanf("%d",&n);inta[n],temp;for(inti=0;i<n;i++){scanf("%d",&a[i]);}for(......
  • C语言 分支和循环(下)--随机数的生成和猜数字小游戏的实现
    电脑自动生成1~100的随机数玩家猜数字,猜数字过程中,根据猜测数据的大小给出大了或小了的反馈,知道才对,游戏结束一.随机数的生成1.rand原型:这个函数可以帮我们生成随机数在这写void的意思是这个函数不需要参数rand函数会返回一个伪函数,这个随机数的范围实在0~RAND_MAX之间,这个RAND_MAX......
  • C语言中的for循环结构
    C语言中的for循环结构1.1语法形式for循环是三种循环中使用最多的,for循环的语法形式如下:for(表达式1;表达式2;表达式3)语句;//如果循环体想要包含更多语句,需要使用大括号表达式1:用于循环变量的初始化表达式2:用于循环结束条件的判断表达式3:用于循环变量的调整1.2fo......
  • C语言中的while循环结构
    C语言中的while循环结构C语言提供了3中循环语句,while就是其中的一种,接下来就介绍一下while语句。while语句的语法结构和if语句非常相似。1.1if和while的对比if(表达式)语句;while(表达式)语句;//如果循环体想包含更多的语句,可以加上大括号写代码对比下:#includ......
  • Unity中查找物体
    最清晰的Unity查找物体的几种方法及优缺点详解!其他教程有很多没注意的地方,请看这里!_heliocentricism的博客-CSDN博客 ......
  • C语言中enum类型的全面解析,让你彻底掌握!
    一、枚举类型在实际情况中,有一些变量的取值范围是有限的。打个比方,一周只有七天,一年有十二个月,一个班每星期有六门课程等等。将这些变量定义为整型、字符型或其他类型是不合适的。为此,C语言引入了一种称为“枚举”的类型。在“枚举”类型的定义中,列出了所有可能的取值,而该“枚举......
  • C语言中的二进制数、八进制数和十六进制数
    C语言是一门使用数字的编程语言,其中包括了8进制和16进制的数字表示方法。这两种表示方法都可以用于整数和字符类型。8进制表示法8进制数字以数字0(零)和前缀0开头表示。例如,八进制数012表示为十进制的10。以下是一些示例:intx=012;//八进制的12,等价于十进制的10inty=0......