【數據結構-查找】有序表的查找-折半查找

算法流程:

對一個從小到大的序列來說。。。。。。。。。。。。

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");

}


發佈了40 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章