zoukankan      html  css  js  c++  java
  • 写了二分查找算法,欢迎查找算法bug

    刚才看了《只有10%程序员能正确实现二分查找算法》文章http://news.csdn.net/a/20100423/218099.html,于是忍不住用C#写了个,欢迎查找算法的bug

    二分查找可以解决(预排序数组的查找)问题:只要数组中包含T(即要查找的值),那么通过不断缩小包含T的范围,最终就可以找到它。一开始,范围覆盖整个数组。将数组的中间项与T进行比较,可以排除一半元素,范围缩小一半。就这样反复比较,反复缩小范围,最终就会在数组中找到T,或者确定原以为T所在的范围实际为空。对于包含N个元素的表,整个查找过程大约要经过log(2)N次比较。

    /// <summary>
            /// 二分查找法
            /// </summary>
            /// <param name="aa"></param>
            /// <param name="a"></param>
            /// <returns></returns>
            public static int GetPosition(int[] aa, int a)
            {

                int arrLength = aa.Length;
                int startPosition = 0;
                int endPosition = arrLength - 1;
                int middlePosition = endPosition / 2;

                if (arrLength>0)
                {
                    return GetValuePosition(aa, a, startPosition, endPosition, middlePosition);
                }

                return -1;

            }

            public static  int GetValuePosition(int[] aa,int a,int startPosition,int endPosition,int middlePosition)
            {
                if (a == aa[middlePosition])
                {
                    return middlePosition;
                }
                if (a > aa[middlePosition]&&endPosition>=startPosition)
                {
                    startPosition = middlePosition + 1;
                    middlePosition = (endPosition + startPosition) / 2;
                   return GetValuePosition(aa, a, startPosition, endPosition, middlePosition);

                }
                else if(a<aa[middlePosition]&&endPosition>=startPosition)
                {
                    endPosition = middlePosition - 1;
                    middlePosition = (endPosition + startPosition) / 2;
                   return  GetValuePosition(aa, a, startPosition, endPosition, middlePosition);
                }

                return -1;

            }

    作者:边写边唱

    文章出处:http://www.cnblogs.com/zoupeiyang

    专注于用自助终端技术实现互联网+,有兴趣朋友欢迎关注   捷思科技

  • 相关阅读:
    pacx & zr(yet)
    FileInputStream RandomAccessFile FileChannel 与 MappedByteBuffer (yet)
    结合自定义注解的 spring 动态注入
    redis事务与管道区别
    jdk动态代理与cglib优势劣势以及jdk动态代理为什么要interface
    maven scope属性值设置含义
    xc (yet)
    单链表 环
    适配器模式,将老接口的数据给新接口用
    移动硬盘无法拷贝大于4G的文件
  • 原文地址:https://www.cnblogs.com/zoupeiyang/p/1719210.html
Copyright © 2011-2022 走看看