【C】二分查找( 折半查找算法),利用分支和循环实现

简介: 【C】二分查找( 折半查找算法),利用分支和循环实现

💻前言

🍁总结如何实现二分查找,也叫折半查找算法。

🍁在一组数据中要找到一个具体数字,如果我们从前到后逐个查找也是可以实现的,但是这样实现效率太低,而二分查找每次查找都可以砍掉一半的数据。

🍁二分查找只支持在 有序的数组中进行查找具体某个数字。

💻实现思维

73d8c9be8b2a4960a39693770de0ac9a.png

当一个数组中放了1到11到的数字,数组左下标为left,右下标为right, mid = (left + right) / 2求出中间元素的下标。

通过中间这个元素与我们所要找的那个元素进行比较;如果arr[mid]>k,说明要找的元素在arr[mid]的左边,right = mid - 1;如果arr[mid]<k,说明要找的元素在arr[mid]的右边,left = mid + 1。

然后再求出新的mid进行下一次比较直到找到要找的数字。

73d8c9be8b2a4960a39693770de0ac9a.png

求mid还可以用 mid = left + (right-left)/2 这样计算,可以有效防止运算时数据超出内存的存储范围!


💻代码实现

//编写代码在一个整形有序数组中查找具体的某个数
//要求:找到了就打印数字所在的下标,找不到则输出:找不到。
#include<stdio.h>
int main()//找14
{
  int arr[] = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20 };
  int sz = sizeof(arr) / sizeof(arr[0]);//求出数组中元素的个数
  int left = 0,mid = 0;
  int right = sz - 1;//元素个数-1求出右下标
  int k = 14;//要找到14
  while (left <= right)//循环到直到找到14
  {
    mid = (left + right) / 2;//mid = left + (right-left)/2
    if (arr[mid] > k)
    {
      right = mid - 1;
    }
    else if (arr[mid] < k)
    {
      left = mid + 1;
    }
    else//此时找到了
    {
      printf("找到了,下标为:>%d",mid);
      break;
    }
  }
  if (left > right)//这种情况已经将所有的数据都进行了比较,找不到
  {
    printf("找不到");
  }
  return 0;
}

73d8c9be8b2a4960a39693770de0ac9a.png

💻结语

各位小伙伴,看到这里就是缘分嘛,希望我的这些内容可以给你带来那么一丝丝帮助,可以的话三连支持一下呗(关注✌️点赞✌️评论✌️)!!!
感谢每一位走到这里的小伙伴,我们可以一起学习交流,一起进步!!!加油!!!

image.png

目录
相关文章
|
7天前
|
存储 算法 索引
【优选算法】—— 二分查找
【优选算法】—— 二分查找
|
7天前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
7天前
|
人工智能 算法 测试技术
【动态规划】【二分查找】C++算法 466 统计重复个数
【动态规划】【二分查找】C++算法 466 统计重复个数
|
7天前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
7天前
|
算法 索引
算法思想总结:二分查找算法
算法思想总结:二分查找算法
|
7天前
|
算法 测试技术 API
深入理解二分查找算法(一)
深入理解二分查找算法(一)
|
7天前
|
机器学习/深度学习 算法 Java
【数据结构查找算法篇】----二分查找【实战项目】
【数据结构查找算法篇】----二分查找【实战项目】
30 1
|
7天前
|
算法 测试技术 C++
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II
【KMP】【二分查找】【C++算法】100207. 找出数组中的美丽下标 II
|
7天前
|
算法 测试技术 C++
【位运算】【二分查找】【C++算法】100160价值和小于等于 K 的最大数字
【位运算】【二分查找】【C++算法】100160价值和小于等于 K 的最大数字
|
7天前
|
存储 机器学习/深度学习 算法
【算法优选】 二分查找专题——贰
【算法优选】 二分查找专题——贰