資料結構(c語言實現) 二分查詢演算法

2021-10-04 11:42:37 字數 1393 閱讀 7738

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...