方法:
public void BinarySearch(double[] a, double target,out int low,out int high) //target目标靶子
{
low = 0;
int n= a.Length - 1;
high =n;
int mid = 0;
double midVal = 0;
while (low <= high)
{
mid = (low + high) >> 1;
midVal = a[mid];
if (midVal < target)
low = mid + 1;
else if (midVal > target)
high = mid - 1;
else
break;
}
for (int i = mid - 1; i >= 0; i--)
{
low = mid;
if (a[i] < a[mid])
{
low = i + 2;
break;
}
else
low = i + 1;
}
for (int j = mid + 1; j <= n; j++)
{
high = mid;
if (a[j] > a[mid])
{
high = j;
break;
}
else
high = j;
}
}
调用示例:
double[] L = new double[15] { 1, 1,1,1,1,1,1,1,1,2, 2, 2, 3, 3, 4 };
int low,high; //a = 0, b = L.Length - 1,
BinarySearch (L,1,out low ,out high );
low,high 分别存放所要查找的内容的数列号。
希望大家多多指教