C# 二分查找

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

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

具体步骤如下:

  1. 初始化左指针left和右指针right,分别指向数组的起始和结束位置。
  2. 不断计算中间位置mid,即mid = (left + right) / 2。
  3. 比较要搜索的值与数组中间元素arraymid的大小。
  4. 如果要搜索的值等于arraymid,则找到目标,返回mid。
  5. 如果要搜索的值小于arraymid,则更新右指针right = mid - 1。
  6. 如果要搜索的值大于arraymid,则更新左指针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 (arraymid == target)

{

return mid;

}

else if (arraymid < 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(arraymid, 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");

}

}

}

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

相关推荐
小雨下雨的雨9 小时前
井字棋AI机器人实现详解 - Minimax算法实战-鸿蒙PC Electron框架完成
前端·人工智能·算法·华为·electron·鸿蒙
xieliyu.12 小时前
Java算法精讲:双指针(三)
java·开发语言·算法
一条小锦吕*12 小时前
基于Spring Boot + 数据可视化 + 协同过滤算法的推荐系统设计与实现(源码+论文+部署全讲解)
spring boot·算法·信息可视化
如竟没有火炬14 小时前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
8Qi814 小时前
LeetCode 1143 & 718:最长公共子序列 / 最长重复子数组
算法·leetcode·职场和发展·动态规划
绿算技术15 小时前
万卡推理集群存储选型分析:从核心架构到应用视角
大数据·科技·算法·架构
想吃火锅100515 小时前
【leetcode】1.两数之和js版
javascript·算法·leetcode
net3m3316 小时前
一阶软件低通滤波器算法
人工智能·算法
水木流年追梦17 小时前
大模型入门-大模型优化方法12-YaRN 长文本外推技术
人工智能·分布式·算法·正则表达式·prompt