【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

目录
相关文章
|
4月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
2月前
|
算法 C# 索引
C#二分查找算法
C#二分查找算法
|
2月前
|
存储 算法 C语言
【C语言】二分查找算法
【C语言】二分查找算法
|
2月前
|
消息中间件 存储 算法
一文搞懂二分查找算法!
一文搞懂二分查找算法!
|
2月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
25 0
|
3月前
|
机器学习/深度学习 算法 数据挖掘
决策树算法大揭秘:Python让你秒懂分支逻辑,精准分类不再难
【9月更文挑战第12天】决策树算法作为机器学习领域的一颗明珠,凭借其直观易懂和强大的解释能力,在分类与回归任务中表现出色。相比传统统计方法,决策树通过简单的分支逻辑实现了数据的精准分类。本文将借助Python和scikit-learn库,以鸢尾花数据集为例,展示如何使用决策树进行分类,并探讨其优势与局限。通过构建一系列条件判断,决策树不仅模拟了人类决策过程,还确保了结果的可追溯性和可解释性。无论您是新手还是专家,都能轻松上手,享受机器学习的乐趣。
49 9
|
4月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
4月前
|
算法
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
【算法】递归总结:循环与递归的区别?递归与深搜的关系?
|
2月前
|
算法 安全 数据安全/隐私保护
基于game-based算法的动态频谱访问matlab仿真
本算法展示了在认知无线电网络中,通过游戏理论优化动态频谱访问,提高频谱利用率和物理层安全性。程序运行效果包括负载因子、传输功率、信噪比对用户效用和保密率的影响分析。软件版本:Matlab 2022a。完整代码包含详细中文注释和操作视频。
|
2天前
|
算法
基于大爆炸优化算法的PID控制器参数寻优matlab仿真
本研究基于大爆炸优化算法对PID控制器参数进行寻优,并通过Matlab仿真对比优化前后PID控制效果。使用MATLAB2022a实现核心程序,展示了算法迭代过程及最优PID参数的求解。大爆炸优化算法通过模拟宇宙大爆炸和大收缩过程,在搜索空间中迭代寻找全局最优解,特别适用于PID参数优化,提升控制系统性能。