方法1
int main()
{
int a[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int sz = sizeof(a) / sizeof(a[0]);
int k = 7;
int low = 0;
int high = sz - 1;
while (low <=high)
{
int mid = (low + high) / 2;
if (a[mid]>k)
{
high = mid - 1;
}
else if (a[mid] < k)
{
low = mid + 1;
}
else
{
printf("找到了,下标为:%d", mid);
break;
}
}
if (low>high)
{
printf("查找失败!");
}
return 0;
}
方法2 递归
int Find(int a[], int low, int high, int key)
{
if (low > high)
return -1;
int mid = (low + high) / 2;
if (key == a[mid])
return mid;
else if (key < a[mid])
return Find(a, low, mid - 1, key);
else
return Find(a, mid + 1, high, key);
}
int main()
{
int a[10] = { 12, 23, 34, 45, 56, 67, 78, 89, 90, 100 };
int n = sizeof(a) / sizeof(int);
int key = 34;
int pos = Find(a, 0, n - 1, key);
if (pos != -1)
printf("找到元素的下标为:%d", pos);
else
printf("查找失败");
}