浮点型二分法查找

来源:互联网 发布:剑三邪笑炮哥捏脸数据 编辑:程序博客网 时间:2024/05/01 08:04

二分法查找据说真正能正确实现的,只有10%的程序员。

本人最近需要用到在有序的浮点数列表中查找数据位置,没想到网络上居然没找到,只能自己写,写了两次才实现,这与整型二分法实现完全不一样,注意了。

        private int GetPosition(double xVal, double[] data)
        {
            int start = 0, end = data.Length, mid;

         //   Array.Sort(data);     //data是升序数组

            if (end <= 0) return -1;
            if (xVal < data[0] || xVal > data[end - 1]) return -1;

            for (int i = start; i < end; i++)
            {
                mid = (start + end) / 2;
                if (xVal < data[mid])
                {

                    i = start;            //可不要
                    end = mid;
                }
                else if (xVal > data[mid])
                {

                    i = start;            //可不要
                    start = mid;
                }
                else    //浮点型,可能一直不会到这,但是为了防止很精度的数在内存表现形式一样
                {
                    return mid;
                }
            }

            if (end - start <= 1)   //注意,这是退出点。只要不存在相等,最后肯定卡在两数中间
            {
                return end;     //或return start,看需要
            }
            return -1;
        }


原创粉丝点击