一、循环模式
#include<stdio.h>
int search(int a[], int n, int key)
{
int low = 0;
int high = n - 1;
int mid;
while (low <= high)
{
mid = (low + high) / 2;
if (key == a[mid])
{
return mid;
}
else if (key > a[mid])
low = mid + 1;
else
{
high = mid - 1;
}
}
return-1;
}
int main()
{
int a[11] = {5,13,19,21,37,56,64,75,80,88,92};
int n = 11;
int key = 88;
int pos = search(a, n, key);
printf("%d",pos);
return 0;
}
二、递归模式
#include <stdio.h>
int BinSrch (int str[], int key, int low, int high)
{
int mid =(low+high)/2;
if(low>high)
{
return -1;
}
if(key==str[mid])
{
return mid;
}
else if(key>str[mid])
{
return BinSrch(str,key,mid+1,high);
}
else
{
return BinSrch(str,key,low,mid-1);
}
}
int main () {
int str[] = { 1,2,3,4,5,6,7,8,9 };
int index;
printf("请输入查找的数字[找到返回下标,否则返回-1]:");
scanf("%d", &index);
index = BinSrch(str, index, 0, 8);
printf("%d\n", index);
}