C语言:整形有序数组中查找具体的某个数(二分查找)

简介: 有的人会问,在一个整形的有序数组中,来查找具体的某个数,直接用下面代码就可以了,还有要用什么二分查找,说的有理,但是,下面的那种代码效率不高,

 C语言:整形有序数组中查找具体的某个数(二分查找)


 有的人会问,在一个整形的有序数组中,来查找具体的某个数,直接用下面代码就可以了,还有要用什么二分查找,说的有理,但是,下面的那种代码效率不高,


acc3f1d5129f4ce6a30e46fc2f3dd566.png


 正所谓技多不压身,既学到知识,又学到方法,对不对,那咱们好好讲讲-----整形有序数组中查找具体的某个数(二分查找)。


 首先呢,我要了解怎么用二分查找:

603ce92c77584cc6989819d74099f110.png

4be8388c24434dfc927e71d609de2389.png

66a45fd92a774744bfbb3e877e47071a.png


其次,就要用代码解决啦

#include<stdio.h>
#include<string.h>
int main()
{
  int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
  int right = sizeof(arr)/sizeof(arr[0]);  //这里用arr10个数字除以一个arr的大小
  int left = 0;                            //定义最左边的下标
  int k = 3;                               //找的数
  int mid = (left + right) / 2;            //中间数 == 找的数
  int flag = 1;                            //采用flag如果找到了flag=1,找不到flag=0 
  while (left <= right)                    //利用循环 当left <= right 就继续找
  {
    if (k == arr[mid])                   //找到了
    {
      printf("找到了,下标为:%d\n", mid);
      flag = 1;
      break;
    }
    else
    {
      flag = 0;       
      if (k > arr[mid])                //找到的数小了
      {
        left = mid + 1;
      }
      else                             //大了
      {
        right = mid - 1;
      }
    }
    mid = (left + right) / 2;            //注意
  }
  if (flag == 0)
  {
    printf("找不到\n");
  }
  return 0;
}
//如果数组很大的话用mid = (left - right) / 2 + left;


不知不觉就到了尾声啦,写的不是很好,不对的地方还请指点指点。

目录
相关文章
|
2月前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
2月前
|
存储 算法 搜索推荐
C语言与人生:数组交换和二分查找
C语言与人生:数组交换和二分查找
|
2天前
|
算法 C语言
【C语言必刷题】3.二分查找
【C语言必刷题】3.二分查找
|
27天前
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
|
27天前
|
存储 C语言
【C语言】Leetcode 88.合并两个有序数组
【C语言】Leetcode 88.合并两个有序数组
15 3
|
2月前
|
存储 编译器 程序员
【C语言】整形数据和浮点型数据在内存中的存储
【C语言】整形数据和浮点型数据在内存中的存储
16 0
|
2月前
|
算法 C语言
C语言之二分查找
C语言之二分查找
|
2月前
|
安全 NoSQL 小程序
嵌入式C语言中整形溢出问题分析
嵌入式C语言中整形溢出问题分析
27 0
|
2月前
|
C语言
二分查找法的区间判断【C语言】
二分查找法的区间判断【C语言】
|
4月前
|
算法 C语言
C语言——二分查找
C语言——二分查找
17 0