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;


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

目录
相关文章
|
C语言
【C语言刷题系列】合并两个有序数组
【C语言刷题系列】合并两个有序数组
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
220 0
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
C语言
C语言----数组----二分查找
C语言----数组----二分查找
154 2
|
C语言
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
C语言---函数--数组---创建一个整形数组,完成对数组的3种操作
251 0
|
C语言
C语言--通过函数实现二分查找
C语言--通过函数实现二分查找
95 0
|
编译器 程序员 C语言
【C语言】变长数组,二分查找和数组之间自动替换的实现
【C语言】变长数组,二分查找和数组之间自动替换的实现
152 4
|
C语言 数据安全/隐私保护
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
【C语言】分支和循环的应用(二分查找、字符移动、模拟登录界面)
136 0
|
存储 搜索推荐 C语言
Leetcode—合并两个有序数组—C语言
Leetcode—合并两个有序数组—C语言
144 0
|
算法 C语言
【C语言】二分查找
【C语言】二分查找