浮點型二分法查找

二分法查找據說真正能正確實現的,只有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;
        }


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章