c#基础之二分查找

适用范围:

适用于在有序的一组数据中查找一个符合条件的数据

原理:

通过把数据分为前后两部分,判断数据在哪一部分,之后再把这个部分分为前后两部分,再次确定数据所在部分。循环调用直至找到数据,或者区间范围不能继续缩小。

代码:

产生随机的一组数据

       static void Function5()
       {
            Random random = new Random();
            int[] arr = new int[10];
            for (int i = 0; i < arr.Length; i++)
            {
                arr[i] = random.Next(0, 11);
                Console.WriteLine("获得随机数" + arr[i]);
            }
           Array.Sort(arr);
           int index = BinaryLookup(arr,10);
           Console.WriteLine("获取到的索引为"+ index);
        }

二分排序

        static int BinaryLookup(int [] arr,int key)
        {
            //要查找的区间末尾索引
            int right = arr.Length;
            //要查找的区间开头索引
            int left = 0;
            
            while (true)//在要查找的区间内找数据
            {
                //mid将数据分为左右两半
                int mid = (right + left) / 2;
                //判断查找区间的中间索引是否符合条件
                if (arr[mid] == key)
                {
                    return mid;
                }
                //当中间数小于要找的数代表要找的数在右半区间
                else if (arr[mid] < key)
                {
                    //修改查找区间为右半区间
                    left = mid + 1;
                }
                //这里使用 else 也行,为了方便理解这里用else if表示
                else if (arr[mid] > key)
                {
                    //修改查找区间为左半区间
                    right = mid - 1;
                }
                //当查找区间超出范围代表这个数组中没有该数据或者该数组不符合初始条件
                if (left >= arr.Length || right<0)
                {
                    break;
                }
            }
            //在该区间没有找到就返回-1;
            return -1;
        }        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值