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