二分查找
二分查找的基本思想是在一个有序序列中,每次取待查找序列的中间元素跟目标元素进行比较,如果小于,则待查找序列定位到后半段,反之则定位到前半段,这样每次比较后都可以将范围缩小到原来的1/2.
注意:二分查找的前提是待查找序列必须是有序的.
下面给出的是C代码的递归与非递归形式:
------------------------------------------------
int b_recursion(int left,int right,int *data,int key)
{
int mid=0;
///左右边界可以取到相等(待查找序列内只有一个元素),
//但是右边界小于左边界表示数据不在目标队列内,查找结实
if(right < left) return -1;
mid=(left+right)/2;
if(data[mid]==key)
return mid;
else if(key < data[mid])//使用左段
return b_recursion(left,mid-1,data,key);
else//使用右段
return b_recursion(mid+1,right,data,key);
}
//非递归实现
// int *data 表示数组
int b_search(int left,int right, int *data,int key)
{
int mid=0;
while(left <=right)
{
mid=(left+right)/2;
if( data[mid]==key)
return mid;
else if(key > data[mid])
left=mid+1;
else if(key < data[mid])
right=mid-1;
}
return -1;
}
-------------------------------------
查找跟排序在一般Web编程中多少是会用到的,不过在.net2.0中你并不需要自己编写代码来实现,.net2.0的System.Collections.Generic命名空间下的List<T>类可以满足一般的自定义类的排序与查找任务,你也可以直接使用Array类的静太方法public static void Sort<T>(T[] array, IComparer<T> comparer);进行排序,使用public static int BinarySearch<T>(T[] array, T value, IComparer<T> comparer);进行查找.
下面是MS实现的二分查找代码:
________________________________________
public virtual int BinarySearch(T[] array, int index, int length, T value, IComparer<T> comparer)
{
if (comparer == null)
{
comparer = Comparer<T>.Default;
}
//MS里好象num1,num2..numx 用的比较多
int num = index;
int num2 = (index + length) - 1;
while (num <= num2)
{
int num4;
int num3 = num + ((num2 - num) >> 1); //使用移位进行除二操作
try
{
num4 = comparer.Compare(array[num3], value);
}
catch (Exception exception)
{
throw new InvalidOperationException(Environment.GetResourceString("InvalidOperation_IComparerFailed"), exception);
}
if (num4 == 0)
{
return num3;
}
if (num4 < 0)
{
num = num3 + 1;
}
else
{
num2 = num3 - 1;
}
}
return ~num;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述