zoukankan      html  css  js  c++  java
  • 查找--二分法查找

    逻辑分析

    二分法查找,又叫折半查找法。

    前提:待查序列必须为线性有序表。

    步骤:

    每次取待查序列的中间值与目标值对比,结果如下:

    如果中间值小于目标值,则说明目标值在的半区,继续取大半区的中间值与目标值对比。

    如果中间值大于目标值,则说明目标值在的半区,继续取小半区的中间值与目标值对比。

    时间复杂度

    O(logn)

    实现代码(C#)

            /// <summary>
            /// 二分法查找
            /// </summary>
            /// <param name="arr">有序序列</param>
            /// <param name="aim">查找目标</param>
            public static void StartDichotomy(int[] arr, int aim)
            {
                int low = 0; //最小下标
                int high = arr.Length - 1;  //最大下标
                int mid = 0;  //中间下标
                int count = 0; //计算次数
    
                bool result = false; //是否查找到目标数字
    
                while (low <= high)
                {
                    count++;
    
                    mid = (high + low) / 2; //每次取中间下标
                    if (arr[mid] < aim)
                    {
                        low = mid + 1;
                    }
                    else if (arr[mid] > aim)
                    {
                        high = mid - 1;
                    }
                    else
                    {
                        result = true;
                        break;
                    }
                }
    
                Console.WriteLine("查找结果:" + (result ? "成功" : "失败"));
                Console.WriteLine("计算次数:" + count);
            }
  • 相关阅读:
    HDU 1269 迷宫城堡
    HDU 4771 Stealing Harry Potter's Precious
    HDU 4772 Zhuge Liang's Password
    HDU 1690 Bus System
    HDU 2112 HDU Today
    HDU 1385 Minimum Transport Cost
    HDU 1596 find the safest road
    HDU 2680 Choose the best route
    HDU 2066 一个人的旅行
    AssetBundle管理机制(下)
  • 原文地址:https://www.cnblogs.com/kavilee/p/5903271.html
Copyright © 2011-2022 走看看