C# 二分查找

        二分查找(Binary Search)是一种在有序数组或列表中查找特定元素的搜索算法。该算法比较要搜索的值和数组的中间元素。如果要搜索的值小于中间元素,则在数组的左半部分继续搜索;如果要搜索的值大于中间元素,则在数组的右半部分继续搜索。不断重复这个过程,直到找到要搜索的值或确定搜索范围为空为止。

        二分查找是一种高效的查找算法,因为在每次比较后,搜索范围可以减半,时间复杂度为O(log n)。二分查找的前提是数组或列表中元素已按照某种顺序(通常是升序)排列。

具体步骤如下:

  1. 初始化左指针left和右指针right,分别指向数组的起始和结束位置。
  2. 不断计算中间位置mid,即mid = (left + right) / 2。
  3. 比较要搜索的值与数组中间元素array[mid]的大小。
  4. 如果要搜索的值等于array[mid],则找到目标,返回mid。
  5. 如果要搜索的值小于array[mid],则更新右指针right = mid - 1。
  6. 如果要搜索的值大于array[mid],则更新左指针left = mid + 1。
  7. 重复上述过程,直到找到目标或确定搜索范围为空。

如果数组或列表不是有序的,可以先对其进行排序,然后再利用二分查找进行搜索。

C#中实现二分查找的完整示例代码:

using System;

class BinarySearchExample
{
    static int BinarySearch(int[] array, int target)
    {
        int left = 0;
        int right = array.Length - 1;

        while (left <= right)
        {
            int mid = left + (right - left) / 2;

            if (array[mid] == target)
            {
                return mid;
            }
            else if (array[mid] < target)
            {
                left = mid + 1;
            }
            else
            {
                right = mid - 1;
            }
        }

        return -1; // Target not found in the array
    }

    static void Main()
    {
        int[] array = { 1, 3, 5, 7, 9, 11, 13, 15, 17 };
        int target = 9;

        int result = BinarySearch(array, target);

        if (result != -1)
        {
            Console.WriteLine($"Target {target} found at index {result}");
        }
        else
        {
            Console.WriteLine("Target not found in the array");
        }
    }
}

这个示例代码实现了一个对有序数组进行二分查找的功能。你可以根据需要修改数组和目标值以进行测试。

示例二 查找字符串:

        在C#中,二分查找通常是用于在有序数组中查找数值类型的数据,而不是用于在字符串数组中查找字符串。不过,如果你需要在有序的字符串数组中查找特定的字符串,你可以按照以下步骤创建一个二分查找的示例代码:

using System;

class StringBinarySearchExample
{
    static int StringBinarySearch(string[] array, string target)
    {
        int left = 0;
        int right = array.Length - 1;

        while (left <= right)
        {
            int mid = left + (right - left) / 2;

            int compareResult = String.Compare(array[mid], target);

            if (compareResult == 0)
            {
                return mid;
            }
            else if (compareResult < 0)
            {
                left = mid + 1;
            }
            else
            {
                right = mid - 1;
            }
        }

        return -1; // Target not found in the array
    }

    static void Main()
    {
        string[] array = { "apple", "banana", "orange", "strawberry", "watermelon" };
        string target = "orange";

        int result = StringBinarySearch(array, target);

        if (result != -1)
        {
            Console.WriteLine($"Target {target} found at index {result}");
        }
        else
        {
            Console.WriteLine("Target not found in the array");
        }
    }
}

        在上面示例代码中,修改了二分查找算法,使其可以在有序的字符串数组中查找特定的字符串。你可以根据需要修改字符串数组和目标字符串以进行测试。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/692656.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue | (三)使用Vue脚手架(中)| 尚硅谷Vue2.0+Vue3.0全套教程

文章目录 &#x1f4da;Todo-list 案例&#x1f407;组件化编码流程&#xff08;通用&#xff09;&#x1f407;实现静态组件&#x1f407;展示动态数据&#x1f407;交互⭐️添加一个todo⭐️todo勾选实现⭐️删除功能实现⭐️底部统计功能实现⭐️底部全选功能实现⭐️底部一…

每日一练:前端js实现算法之两数之和

方法一&#xff1a;暴力法 function twoSum(nums, target) {for (let i 0; i < nums.length; i) {for (let j i 1; j < nums.length; j) {if (nums[i] nums[j] target) {return [i, j];}}}return null; }方法二&#xff1a;哈希表 function twoSum(nums, target) …

函数——递归4(c++)

正整数N转换成一个二进制数 题目描述 输入一个不大于 32767 的整数 n &#xff0c;将它转换成一个二进制数。 输入 输入只有一行&#xff0c;包括一个整数 n (0≤ n ≤32767)。 输出 输出只有一行。 样例 输入复制 100 输出复制 1100100 输入复制 0 输出复制…

前端算法题——给定一个整数数组,判断是否存在重复元素。

前言 题目可以理解为如果存在一值在数组中出现至少两次&#xff0c;函数返回 true 。如果数组中每个元素都不相同&#xff0c;则返回 false。 示例 1:输入: [1,2,3,1] 输出: true示例 2:输入: [1,2,3,4] 输出: false这题一看就是 计数问题&#xff0c;题目中“如果存在一值在…

Docker从入门到上天系列第二篇:Docker与传统虚拟机对比

&#x1f609;&#x1f609; 欢迎加入我们的学习交流群呀&#xff01; ✅✅1&#xff1a;这是孙哥suns给大家的福利&#xff01; ✨✨2&#xff1a;我们免费分享Netty、Dubbo、k8s、Mybatis、Spring、Security、Docker、Grpc、消息中间件、Rpc、SpringCloud等等很多应用和源码级…

代码随想录算法训练营day17||二叉树part04、110.平衡二叉树 、257. 二叉树的所有路径 、404.左叶子之和

注意&#xff1a;迭代法&#xff0c;可以先过&#xff0c;二刷有精力的时候 再去掌握迭代法。 110.平衡二叉树 &#xff08;优先掌握递归&#xff09; 再一次涉及到&#xff0c;什么是高度&#xff0c;什么是深度&#xff0c;可以巩固一下。 题目&#xff1a;给定一个二叉树&am…

为什么从没有负值的数据中绘制的小提琴图(Violin Plot)会出现负值部分?

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 小提琴图&#xff08;Violin Plot&#xff09; 是一种用于展示和比较数据分布的可视化工具。它结合了箱形图&#xff08;Box Plot&#xff09;和密度图&#xff08;Kernel Density Plot&#xff09;的特…

电商数据API接口

1、将数据采集的整体成本降低55%。在电商API接口负责了整个数据采集流程后&#xff0c;这家电商公司成功节约了维护和开发上的成本。 2、电商爬虫API可以从极复杂的来源中采集数据&#xff0c;确保完整交付。在电商爬虫API的帮助下&#xff0c;该公司现在可以获取完成业务目标…

Java实现自动化pdf打水印小项目 使用技术pdfbox、Documents4j

文章目录 前言源码获取一、需求说明二、 调研pdf处理工具word处理工具 三、技术栈选择四、功能实现实现效果详细功能介绍详细代码实现项目目录WordUtilsMain类实现部分&#xff1a;第一部分Main类实现部分&#xff1a;第二部分Main类实现部分&#xff1a;第三部分 资料获取 前言…

Java-长字符串加密

引言&#xff1a; 在数据安全领域&#xff0c;加密技术是保护信息不被未授权访问的重要手段。特别是在处理长字符串时&#xff0c;如何保证加密后的数据既安全又高效&#xff0c;是一个值得探讨的话题。本文将介绍几种常见的加密算法&#xff0c;并展示如何在Java中实现这些算法…

@ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)

代码随想录算法训练营第8周&#xff08;C语言&#xff09;|Day53&#xff08;动态规划&#xff09; Day50、动态规划&#xff08;包含题目 ● 123.买卖股票的最佳时机III ● 188.买卖股票的最佳时机IV &#xff09; 123.买卖股票的最佳时机III 题目描述 给定一个数组 price…

数字化转型导师坚鹏:政府数据治理方法及成功案例

课程背景&#xff1a; 很多政府存在以下问题&#xff1a; 不知道如何理解数据治理标准化建设模式&#xff1f; 不清楚如何有效掌握政府数据治理落地技术&#xff1f; 不清楚如何有效学习标杆政府数据治理案例&#xff1f; 学员收获: 深入理解数据治理标准化建设模式。…

Python学习-环境搭建

一、序章 1、Python的后台是PyPI。 2、PyPI是一个拥有成千上万第三方模块的地方。 二、环境搭建 1、Python官网地址 https://www.python.org&#xff0c;在download中下载对应系统最新版本即可。 2、安装安装包 勾选“Add Python 3.10 to PATH”&#xff0c;然后点击“I…

05 扩展组件:自定义CheckBox组件

系列文章目录 01 Qt自定义风格控件的基本原则-CSDN博客 02 从QLabel聊起&#xff1a;自定义控件扩展-图片控件-CSDN博客 03 从QLabel聊起&#xff1a;自定义控件扩展-文本控件-CSDN博客 04 自定义Button组件&#xff1a;令人抓狂的QToolButton文本图标居中问题-CSDN博客 目…

离线升级esp32开发板升级包esp32-2.0.14(最新版已经3.0alpha了)

1.Arduino IDE 2.3.2最新 2024.2.20升级安装:https://www.arduino.cc/en/software 2.开发板地址 地址&#xff08;esp8266,esp32&#xff09; http://arduino.esp8266.com/stable/package_esp8266com_index.json,https://raw.githubusercontent.com/espressif/arduino-esp32…

鸿蒙小案例-五子棋

鸿蒙小案例-五子棋 1.准备组件(组件布局) 2.下棋功能实现 3.机器人下棋功能实现 4.赢棋功能实现 5.附属功能实现刚开始以为挺简单的&#xff0c;越写越…emo 因为代码有点多&#xff0c;所以这里就简单讲下逻辑&#xff0c;文末贴上代码 逻辑只是我个人想的&#xff0c;不代…

线阵相机参数介绍之轴编码器控制

1.1 功能介绍 编码器是将检测对象的运动与相机拍摄取图相匹配的设备&#xff0c;也即检测对象运动一定距离&#xff0c;相机就拍摄一定行高的图像。 编码器会将检测对象的实际位移转换为固定数量电信号。例如&#xff1a;编码器的精度是2000p/r,该参数的含义是编码器每转一圈输…

IDEA插件推荐:免费好用!

IDEA是一款功能强大的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它可以帮助开发人员更加高效地编写、调试和部署软件应用程序。我们在编写完接口代码后需要进行接口调试等操作&#xff0c;一般需要打开额外的调试工具。 今天给大家介绍一款IDEA插件&#xff1a;Api…

C语言------------指针笔试题目深度剖析

1. #include <stdio.h> int main() { int a[5] { 1, 2, 3, 4, 5 }; int *ptr (int *)(&a 1); printf( "%d,%d", *(a 1), *(ptr - 1)); return 0; } 首先要明白这个强制类型转换&#xff0c;即int(*)[5]类型转换成int(*)类型&#xff1b; *&#xff…

MySQL 安装步骤

下载地址&#xff1a;https://downloads.mysql.com/archives/community/&#xff0c; 选择第二个 将下载的压缩包解压到自己想要放到的目录下&#xff08;路径中最好不要有中文&#xff09; 一、添加环境变量 环境变量里面有很多选项&#xff0c;这里我们只用到Path这个参数…