l是使用者傳入的乙個線性表。函式binarysearch要查詢x在data中的位置,即陣列下標(注意:元素從下標1開始儲存)。找到則返回下標,否則返回乙個特殊的失敗標記notfound。
以下解答僅供參考
二分查詢也稱折半查詢(binary search),它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素按關鍵字有序排列。
#
include
#include
#include
#include
#define
maxsize10#
define
notfound
0typedef
struct
lnode
node;
node*
readinput()
;//順序表的初始化
void
sortlist
(node *l)
;//對順序表進行排序
void
printflist
(node *l)
;//遍歷順序表
intbinarysearch
(node *l,
int x)
;//二分查詢演算法
intmain()
node*
readinput()
srand((
int)
time(0
)); l->last =0;
for(
int i =
0; i < len; i++
)sortlist
(l);
return l;
}void
sortlist
(node *l)}}
}void
printflist
(node *l)
printf
("\n");
}/**
1、找到順序表的第乙個下標和最後乙個下標
2、借用迴圈---終止條件為:begin>end
3、在迴圈中求出順序表的中間元素
4、將中間元素和目標值作比較
5、相等直接返回中間值的下標+1,目標值大於中間值,則將第乙個元素的下標改為:mid+1,否則最後乙個元素的下標改為mid-1
*/int
binarysearch
(node *l,
int x)
while
(begin<=end)
else
if(l->data[mid]
>x)
else
}return notfound;
}
二分查詢C語言實現
二分查詢的簡單實現 include include include define n 20 define n rand 200 int cmp const void a const void b 返回在陣列中位置 int b search int a,int p,int q,int key retu...
C語言實現二分查詢
下面為在陣列a 10 中實現二分查詢的 include includevoid binary search int arr,int right,int k 二分查詢函式 else if mid arr k else if left right printf 找不到!n int main int re...
二分查詢(C語言實現)
二分查詢 前提就是資料必須有序,然後從資料的中間位置開始查起,如果中間值比key小,則從中間值位置開始繼續查詢,反之剛從開頭到中位置查詢,重複以上過程直到結束。從 實現上來說,既可以用迴圈實現,也可以用遞迴實現。下面將用這兩種方法以c語言實現二分查詢。遞迴 include int binary fi...