首页 > 编程语言 >C#二分查找算法

C#二分查找算法

时间:2024-10-12 13:00:03浏览次数:4  
标签:二分 arr target C# int 查找 目标值

前言

二分查找算法是一种在有序数组中查找特定元素的搜索算法。

实现原理

二分查找的实现依赖于以下几个关键步骤:

  1. 计算查找范围的中间索引。
  2. 比较中间索引处的值与目标值。
  3. 根据比较结果调整查找范围(左半部分或右半部分)。
  4. 重复上述步骤直到找到目标值或查找范围为空。

动图演示

看一看二分查找与顺序查找的动态对比图:

 

代码实现

    public class 二分查找算法
    {
        /// <summary>
        /// 二分查找算法
        /// </summary>
        /// <param name="arr">arr是已排序的数组</param>
        /// <param name="target">target是要查找的目标值</param>
        /// <returns>目标值在数组中的索引,如果未找到则返回-1</returns>
        public static int BinarySearch(int[] arr, int target)
        {
            int left = 0; // 定义左指针
            int right = arr.Length - 1; // 定义右指针

            while (left <= right)
            {
                // 计算中间元素的索引
                int mid = left + (right - left) / 2;

                if (arr[mid] == target)
                {
                    // 如果中间元素等于目标值
                    return mid; // 查找成功,返回索引
                }
                else if (arr[mid] < target)
                {
                    // 如果目标值小于中间元素,则在左半部分查找
                    left = mid + 1;
                }
                else
                {
                    // 如果目标值大于中间元素,则在右半部分查找
                    right = mid - 1;
                }
            }

            // 未找到 target,返回-1
            return -1;
        }

        public static void BinarySearchRun()
        {
            int[] arr = { 1, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59 }; //注意:这里的数组是已排序的数组
            int target = 31; //需要要查找的目标值

            int result = BinarySearch(arr, target); //调用二分查找方法

            if (result == -1)
            {
                Console.WriteLine("元素未找到");
            }
            else
            {
                Console.WriteLine($"元素找到,索引为:{result},值为:{arr[result]}");
            }
        }
    }

数据结构与算法实战入门指南

https://mp.weixin.qq.com/s/XPRmwWmoZa4zq29Kx-u4HA

参考文章

标签:二分,arr,target,C#,int,查找,目标值
From: https://www.cnblogs.com/Can-daydayup/p/18460307

相关文章

  • Project Euler 728 题解
    Problem728CircleofCoins得到Wallbreaker5th的指导。\(F\)就是求这些环上区间(记为\(A\))的异或线性基大小。令\(A'_i\getsA_i\oplusA_{i+1}\)。现在求\(\langA'\rang\)的线性基。如果可能从全黑和全白间转换,那么\(\dim\langA'\rang=\langA\rang-1\),否则不\(-1......
  • 雨天道路目标检测数据集(黑夜和白天) 3600张 雨天 带标注 voc yolo 7类
     雨天道路目标检测数据集3600张雨天带标注vocyolo白天分类名:(图片张数,标注个数)car:(1134,10528)truck:(394,722)person:(387,1585)rider:(47,56)bike:(64,86)bus:(187,256)motor:(29,32)总数:(1150,13265)总类(nc):7类晚上分类名:(图片张数,标注......
  • HEU KMS Activator v42.3.0
    不多做介绍了,懂得自然懂!123网盘:https://www.123pan.com/s/DMeA-sIuxA.html......
  • Leetcode 1192. 查找集群内的关键连接
    1.题目基本信息1.1.题目描述力扣数据中心有n台服务器,分别按从0到n-1的方式进行了编号。它们之间以服务器到服务器的形式相互连接组成了一个内部集群,连接是无向的。用connections表示集群网络,connections[i]=[a,b]表示服务器a和b之间形成连接。任何服务器都可......
  • AOT漫谈专题(第二篇): 如何对C# AOT轻量级APM监控
    一:背景1.讲故事上一篇我们聊到了如何调试.NETNativeAOT程序,这是研究一个未知领域知识的入口,这篇我们再来看下如何对NativeAOT程序进行轻量级的APM监控,当然这里的轻量级更多的是对AOT中的coreclr内容的挖掘。二:如何轻量级APM监控1.一个简单的例子用一个不断的往内存......
  • HTML-CSS
    初识web前端Web标准也称为网页标准,由一系列的标准组成,大部分由W3C(WorldWideWebConsortium,万维网联盟)负责制定。三个组成部分:HTML:负责网页的结构(页面元素和内容)。CSS:负责网页的表现(页面元素的外观、位置等页面样式,如:颜色、大小等)。JavaScript:负责网页的行为(交互效果)。......
  • JavaScript
    什么是JavaScript?Web标准也称为网页标准,由一系列的标准组成,大部分由W3C(WorldWideWebConsortium,万维网联盟)负责制定。三个组成部分:HTML:负责网页的基本结构(页面元素和内容)。CSS:负责网页的表现效果(页面元素的外观、位置等页面样式,如:颜色、大小等)。JavaScript:负责网页的......
  • ORCLE与MySQL的相互转化
    1.情景展示在实际开发中,不同的地方可能所需使用的数据库是不同的。这就要求,我们开发的程序需要兼容不同的数据库,放到程序里面就是:需要有不同类型的sqlMap文件。以既要兼容MySQL,也要兼容Oracle进行举例说明。2.准备工作第一步根据已经写好的一套sql进行复制,然后,在原有sql的......
  • 【解决方案】Sublime Text 4 按下 Esc 键后无法输入任何内容
    在最后编辑博客内容时,我的Sublime版本为4180。我基本用SublimeText4替代了系统自带的Notepad,我用它编辑任何东西(除了代码,手动狗头)。开始我怀疑是PackageControl安装了过多依赖导致的兼容性问题,但由于Sublime多次更新,我的PackageControl再次从命令面板消失,而它......
  • 用自定义功能区完成Excel两种颜色的交错填充
    今天需要用Excel中的填充颜色完成两种颜色的交错填充在excel中,选择一个颜色填充后,再切换到另一个颜色,再点击填充。操作起来会显得比较笨重 于是萌生了一个想法,是否可以通过Excel的自定义功能区,增加一个类似于填充颜色的小方格,把另一种颜色放进去呢?答案是否定的。因为Excel默......