C#二分查找

二分查找前的前提是需要先排序,网上看了很多计算二分查找的一个中间索引的一个计算 基本都是 中间索引=(左值+右值)/ 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;
        }
    }
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值