ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

查找算法之二分查找

2020-11-25 10:02:16  阅读:202  来源: 互联网

标签:二分 leftIndex val int midIndex 算法 查找 arrs


二分查找的两种实现方式

namespace DataStructureAndAlgorithm.Search
{
    /// <summary>
    /// 二分查找算法
    /// </summary>
    public class BinarySearch
    {
        public static void Test()
        {
            int[] arrs = { 1,3,7,23,44,55 };
            int index = SearchWhile(arrs, 23);
            index = SearchDiGui(arrs, 0, arrs.Length - 1, 23);
            index = SearchWhile(arrs, 100);
            index = SearchDiGui(arrs, 0, arrs.Length - 1, 100);
            index = SearchWhile(arrs, 44);
            index = SearchDiGui(arrs, 0, arrs.Length - 1, 44);
        }
        /// <summary>
        /// 方法一:用While实现
        /// </summary>
        /// <param name="arrs"></param>
        /// <param name="val"></param>
        /// <returns></returns>
        public  static int SearchWhile(int [] arrs,int val)
        {
            int leftIndex = 0;
            int rightIndex = arrs.Length - 1;
            while (leftIndex <= rightIndex)
            {
                int midIndex = (leftIndex + rightIndex) / 2;
                int midVal = arrs[midIndex];
                if (val > midVal)
                {
                    //向右查找
                    leftIndex = midIndex + 1;
                }
                else if (val < midVal)
                {
                    //向左查找
                    rightIndex = midIndex - 1;
                }
                else if (val == midVal)
                {
                    //找到了
                    return midIndex;
                }
            }
            //没找到
            return -1;
        }

        /// <summary>
        /// 方法二:用递归实现
        /// </summary>
        /// <param name="arrs"></param>
        /// <param name="leftIndex"></param>
        /// <param name="rightIndex"></param>
        /// <param name="val"></param>
        /// <returns></returns>
        public static int SearchDiGui(int[] arrs,int leftIndex,int rightIndex,int val)
        {
            if (leftIndex > rightIndex)
            {
                //没找到
                return -1;
            }
            int midIndex = (leftIndex + rightIndex) / 2;
            if (val == arrs[midIndex])
            {
                //找到了
                return midIndex;
            }
            else if (val > arrs[midIndex])
            {
                //向右查找
                return SearchDiGui(arrs, midIndex + 1, rightIndex, val);
            }
            else
            {
                //向左查找
                return SearchDiGui(arrs, leftIndex, midIndex - 1, val);
            }
        }
    }
}

 

标签:二分,leftIndex,val,int,midIndex,算法,查找,arrs
来源: https://www.cnblogs.com/huangzhen22/p/14034241.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有