zoukankan      html  css  js  c++  java
  • 折半查找Binary Search

    折半查找的查找过程是:先确定待查记录所在的范围(区间),然后逐渐缩小范围直到找到或找不到记录为止。

    以处于区间中间为止记录的关键字和给定值比较,若相等,则查找成功;若不相等,则缩小范围,直至新的区间中间位置记录的关键字等于给定值或者查找区间的大小小于0(表明查找不成功)为止。

    折半查找只适用于有序表,且限于顺序存储结构。

    折半查找性能:log2(n+1)-1

    C# 代码

    1. 普通方法

    private static int Binary1(int[] arr, int x)
            {
                int low = 0;
                int high = arr.Length - 1;
                int pointer;
    
                while (low <= high)
                {
                    pointer = (low + high) / 2;
                    if (arr[pointer] == x)
                    {
                        return pointer;
                    }
                    else if (x > arr[pointer])
                    {
                        low = pointer + 1;
                    }
                    else
                    {
                        high = pointer - 1;
                    }
                }
    
                return -1; //当x不在数组arr中时,返回-1
            }

    2. 递归方法

    private static int Binary2(int[] arr, int x, int low, int high)
            {
                //当x不在数组arr中时,返回-1
                if (low > high)
                {
                    return -1;
                }
    
                int pointer = (low + high) / 2;
    
                if (arr[pointer] == x)
                {
                    return pointer;
                }
    
                if (arr[pointer] > x)
                {
                    high = pointer - 1;
                    return Binary2(arr, x, low, high);
                }
                else
                {
                    low = pointer + 1;
                    return Binary2(arr, x, low, high);
                }           
            }
  • 相关阅读:
    ...
    抛砖引玉,说平台概念
    杂想
    相机镜头简易擦拭篇
    优秀软件体验2
    牛人就在我的身边
    对魔时网做了一下了解
    来了兴致,试试django吧,呵呵
    SD2.0大会
    从《首届中国优秀软件创新大赛 寻找中国软件新星 》预测互联网的未来趋势
  • 原文地址:https://www.cnblogs.com/xiaoyusmile/p/2623794.html
Copyright © 2011-2022 走看看