二分法查找据说真正能正确实现的,只有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;
}