二分查找前的前提是需要先排序,网上看了很多计算二分查找的一个中间索引的一个计算 基本都是 中间索引=(左值+右值)/ 2 这种方式进行计算,这种方式其实是有个小Bug的,就是当数值很大的时候会有可能照成数值溢出。因为数值相加容易溢出,正确的应该是相减然后加一个最小量来计算 中间索引=左索引 +(右索引-左索引)/ 2 这样可以很好的解决溢出问题,相比较加法而言。
好了,二分查找原理网上很多,就不赘述了。我就直接贴我代码,方便日后使用。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 二分查找
{
public class Search
{
/// <summary>
/// 二分查找
/// </summary>
/// <param name="arr">需要查找的集合</param>
/// <param name="target">需要搜索的值</param>
/// <returns></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 (target < arr[mid])
{
right = mid - 1;
}
else if (target > arr[mid])
{
left = mid + 1;
}
else
{
//找到了直接返回
return mid;
}
}
//未找到返回-1
return -1;
}
}
}