算法流程:
對一個從小到大的序列來說。。。。。。。。。。。。
1.置查找範圍初態:low=1,high=n;
2.對當前的查找範圍進行以下處理
2.1求中項mid=(low+high)/2
2.2將指定值k與中項的關鍵字值進行比較,如果等於則返回中項序號mid;若mid<k,則low=mid+1,反之high=mid-1;
2.3重複2.2直至查找到返回mid或者當low>high時候返回0
#include<stdio.h>
#include<stdlib.h>typedef int Datatype;
struct Rec
{
Datatype key;
};
Rec r[] = { 0,5,13,19,21,37,56,64,75,80,88,92};//記住第一個r[0]的值一定要放入0;Rec r[n+1].r中內容爲n+1,這是因爲把第0個值裏放入了一個0.
//假如有序表示從小到大來表示的
int bisrch(Rec r[], int n, Datatype k)
{
int low, high, mid;
low = 1;
high = n;
while (low < high)
{
mid = (low + high) / 2;
if (r[mid].key == k)
return mid;
else if (r[mid].key > k)
high = mid - 1;
else
low = mid + 1;
}
if (low>high)
return 0;
}
int main(void)
{
int i = bisrch(r, 11, 37);
printf("I=%d", i);
if (i != 0)
printf("查找成功!\n");
else
printf("查找失敗!\n");
}