二分查找(折半查找)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二分查找(折半查找)相关的知识,希望对你有一定的参考价值。

二分查找条件:有序数组。

查找原理:查找过程从数组的中间元素开始,如果中间元素正好等于要查找的元素,则搜索过程结束;

如果某一特定元素大于或小于中间元素,则在数组大于或小于中间原色的那一半中查找,而且跟开始一样从中间元素开始比较。

如果在某一步骤数组为空,则代表找不到。

这种搜索算法每一次比较都使搜索范围缩小一半。

时间复杂度:O(logn)

使用二分查找有两个前提条件:

1,待查找的列表必须有序。

2,必须使用线性表的顺序存储结构来存储数据。

下面是实现代码。

C#版:

技术分享
namespace BinarySearch.CSharp
{
    class Program
    {
        static void Main(string[] args)
        {
            List<int> list = new List<int> { 10,20,30,40,50,60,70,80,90 };

            Console.WriteLine("********************二分查找********************\n");
            Display(list);
            int result = BinarySearch(list, 40);
            if (result != -1) Console.WriteLine("40在列表中的位置是:{0}", result);
            else Console.WriteLine("对不起,列表中不存在该元素!");

            Console.ReadKey();
        }

        /// <summary>
        /// 二分查找
        /// </summary>
        /// <param name="list">查找表</param>
        /// <param name="key">给定值</param>
        /// <returns>给定值在列表中的位置</returns>
        public static int BinarySearch(List<int> list, int key)
        {
            int low = 0;
            int high = list.Count - 1;

            while (low <= high)
            {
                int middle = (low + high) / 2;

                //判断中间记录是否与给定值相等
                if (list[middle] == key)
                {
                    return middle;
                }
                else
                {
                    //在中间记录的左半区查找
                    if (list[middle] > key) high = middle - 1;

                    //在中间记录的右半区查找
                    else low = middle + 1;
                }
            }

            //没有找到(查找失败)
            return -1;
        }

        private static void Display(IList<int> list)
        {
            Console.WriteLine("\n**********展示结果**********\n");

            if (list != null && list.Count > 0)
            {
                foreach (var item in list)
                {
                    Console.Write("{0} ", item);
                }
            }
            Console.WriteLine("\n**********展示完毕**********\n");
        }
    }
}
技术分享

程序输出结果如图:

技术分享

 

以上是关于二分查找(折半查找)的主要内容,如果未能解决你的问题,请参考以下文章

C语言二分查找算法,折半查找算法

二分查找(折半查找)

python实现二分查找(折半查找)算法

折半查找(二分查找)

二分查找(折半查找)

二分查找(折半查找)算法详解(C语言实现)