【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

目录
相关文章
|
17天前
|
存储 算法 索引
【优选算法】—— 二分查找
【优选算法】—— 二分查找
|
17天前
|
算法 程序员 数据处理
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
算法与人生 揭秘C语言中高效搜索的秘诀——二分查找算法详解
|
17天前
|
算法 测试技术 索引
算法-二分查找
算法-二分查找
17 0
|
7天前
|
机器学习/深度学习 算法
m基于GA-GRU遗传优化门控循环单元网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,一个基于遗传算法优化的GRU网络展示显著优化效果。优化前后的电力负荷预测图表显示了改进的预测准确性和效率。GRU,作为RNN的一种形式,解决了长期依赖问题,而遗传算法用于优化其超参数,如学习率和隐藏层单元数。核心MATLAB程序执行超过30分钟,通过迭代和适应度评估寻找最佳超参数,最终构建优化的GRU模型进行负荷预测,结果显示预测误差和模型性能的提升。
24 4
|
7天前
|
算法
递归算法实现二分查找
本文简要介绍了递归实现的二分查找算法,这是一种在有序列表中快速查找的策略。递归方法虽在实际应用中较少,但有助于理解递归思想,为学习数据结构中的树内容打下基础。文中提供了原版和递归版本的二分查找代码,并强调了递归算法中处理未找到情况的注意事项。此外,还提到了递归在解决复杂问题时的优势,并通过链接分享了一个关于递归实现素数判断的例子。
17 2
|
9天前
|
算法 索引
【数据结构与算法 | 基础篇】力扣704/35/34:二分查找
【数据结构与算法 | 基础篇】力扣704/35/34:二分查找
|
17天前
|
算法 测试技术 Serverless
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
【二分查找】【C++算法】378. 有序矩阵中第 K 小的元素
|
17天前
|
算法 索引
算法思想总结:二分查找算法
算法思想总结:二分查找算法
|
17天前
|
算法 测试技术 API
深入理解二分查找算法(一)
深入理解二分查找算法(一)
|
17天前
|
机器学习/深度学习 算法 Java
【数据结构查找算法篇】----二分查找【实战项目】
【数据结构查找算法篇】----二分查找【实战项目】
34 1
http://www.vxiaotou.com