二分查找(非要5个字)

简介: 二分查找(非要5个字)

经过上一篇的冒泡排序算法,可以将无序的数组排列整齐,在此基础上,在一个数组里面找一个元素变得方便起来,不用循环遍历数组去找元素了,用二分查找变得简单起来,想必大家都玩过猜数字游戏1~100之间,假如说你说一个数字23,主持人说猜小了,你又说个24,主持人反手就是一个大比兜,这个里面就用到了二分法。

int arr1[10] = { 1,6,9,12,43,56,66,77,81,95 };

给出以上数组,10个元素,假如说要找的数字是81,他的下标是8

假如要找的数字是6,他的下标是1

假如说要找的是7,数组中没有该元素

根据上面图示分析,代码如下

int main()
{
  int a;
  scanf_s("%d", &a);//要查找的数字
  int arr1[10] = { 1,6,9,12,43,56,66,77,81,95 };被查找的数组
  int sz = sizeof(arr1) / sizeof(arr1[0]);求数组长度
  int left = 0;
  int right = sz - 1;
  int mid = (left + right) / 2;
  while (left < right)
  {
    if (a > arr1[mid])//对应第一张图
    {
      left = mid + 1;
      mid = (left + right) / 2;
    }
    else if (a<arr1[mid])//对应第二张图
    {
      right = mid-1;
      mid = (left + right) / 2;
    }
    else if (a == arr1[mid])//对应每张图中最后找到元素的情况
    {
      printf("找到了,下标是%d", mid);
      break;
    }
}
  if (left >= right)//对应最后一张图没找到
  {
    printf("没找到\n");
  }
}

结果展示

对应已经排好序的数组用此方法(二分查找)比较方便,希望可以帮助到大家,如果有不对的地方,请大佬们指教,谢谢大家了

目录
相关文章
|
程序员
【Leetcode】面试题 01.02. 判定是否互为字符重排、面试题 01.04. 回文排列
目录 面试题 01.02. 判定是否互为字符重排 面试题 01.04. 回文排列
67 0
|
API
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(下)
41 0
|
4月前
【刷题记录】数字颠倒、单词倒排
【刷题记录】数字颠倒、单词倒排
|
7月前
|
机器人 Java
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
73 0
每日一刷《剑指offer》字符串篇之第一个只出现一次的字符
|
7月前
|
Java Go
每日一题《剑指offer》字符串篇之字符流中第一个不重复的字符
每日一题《剑指offer》字符串篇之字符流中第一个不重复的字符
66 0
每日一题《剑指offer》字符串篇之字符流中第一个不重复的字符
|
7月前
|
Java
每日一题《剑指offer》字符串篇之字符串的排列
每日一题《剑指offer》字符串篇之字符串的排列
81 0
每日一题《剑指offer》字符串篇之字符串的排列
|
7月前
剑指Offer LeetCode 面试题58 - I. 翻转单词顺序
剑指Offer LeetCode 面试题58 - I. 翻转单词顺序
45 0
|
Serverless 索引
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和(上)
代码随想录 Day5 哈希表1 T242 相同字母的异序词 T349两个数组的交集 T202 快乐数 T1 两数之和
79 0
|
存储 自然语言处理 索引
|
存储 C++
剑指Offer - 面试题25:合并俩个排序的链表
剑指Offer - 面试题25:合并俩个排序的链表
65 0