当前位置: 首页 > article >正文

C#二分查找算法

前言

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

实现原理

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

  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

参考文章

  • https://blog.csdn.net/Sunnyside_/article/details/114700193


http://www.kler.cn/a/373385.html

相关文章:

  • 懒饭 3.0.2 | 谷歌版纯净无广告教做菜软件
  • Facebook 隐私风波:互联网时代数据安全警钟
  • 华为数通HCIE备考经验分享
  • nginx 配置ssl_dhparam好处及缺点
  • STM32 FreeRTOS 的任务挂起与恢复以及查看任务状态
  • vscode 扩展Cline、Continue的差别?
  • 实时特征框架的生产实践|得物技术
  • 【华为HCIP实战课程二十七】中间到中间系统协议IS-IS Hello报文,网络工程师
  • 【rabbitmq】绑定死信队列示例
  • golang gin ShouldBind的介绍和使用
  • 代码随想录(十二)——图论
  • CentOS9 Stream 支持输入中文
  • React中管理state的方式
  • Java EasyExcel 导出报内存溢出如何解决
  • 知识的定义与分类体系详解 - 从零基础到专业理解
  • 【三十八】【QT开发应用】vlcplayer视频播放器(一)实现视频播放,视频暂停,视频停止,进度条调节,音量调节,时长显示功能
  • Qt 坐标系统与坐标变换
  • 外键的作用和用法
  • IPD新产品立项管理的典型问题分析(上)
  • 【JVM 深入了解】JVM 到底包含什么?
  • Pycharm报错:Error:failed to find libmagic. Check your installation
  • 信息学奥赛复赛复习19-CSP-J2023-02公路-贪心算法、向上取整、向下取整
  • C# 支持三种方式实现创建 XML文档
  • 关于Android Studio Koala Feature Drop | 2024.1.2下载不了插件的解决办法
  • PHP反序列化-pikachu
  • JavaEE 多线程第四节 (线程核心操作----线程开始/线程终止)