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);
                }           
            }
  • 相关阅读:
    px和rem换算
    使用Android Studio创建Android项目
    Hopscotch
    AtCoder Grand Contest 010 --C:Cleaning
    Hello world!
    概率生成函数
    FFT 学习笔记
    扩展中国剩余定理(excrt)
    组合恒等式
    常见数列
  • 原文地址:https://www.cnblogs.com/xiaoyusmile/p/2623794.html
Copyright © 2011-2022 走看看