1152 二分搜尋

2021-08-04 12:42:01 字數 1134 閱讀 3994

在有序序列中查詢某一元素x。

首先輸入乙個正整數n(n<=100000),表示該序列有n個整數,然後按從小到大的順序輸入n個整數;

接著是乙個正整數m,表示有m次查詢;

最後是m個整數,表示m個要查詢的整數x。

對於每一次查詢,有一行輸出。若序列中存在要查詢的元素x,則輸出元素x在序列中的序號(序號從0開始);若序列中不存在要查詢的元素x,則輸出"not found!"。

51 3 5 7 9 11-112345678910

not found!0not found!1not found!2not found!3not found!4not found!

二分查詢

二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好;其

缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的

關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功;否則利用中間位置

記錄將表分成前、後兩個子表,如果中間位置記錄的關鍵字大於查詢關鍵字,則進一步查詢前一子表,否則進一步查詢後一子表。重複以上過程,直到找到滿足條件的

記錄,使查詢成功,或直到子表不存在為止,此時查詢不成功。

實現過程

若查詢範圍為空,返回-1;

否則mid=(low+high)/2;

若x等於a[mid],查詢成功,返回mid;

若x小於a[mid],在左半區查詢;

若x大於a[mid],在右半區查詢。

ac**

#include #include int bsearch(int a,int x,int low,int high);

int main()

{ int n,m,x;

int a[100000];

int i;

int pos=0;

scanf("%d",&n);

for(i=0; ihigh)

return -1;

else

{mid=(low+high)/2;

if(x==a[mid])

return mid;

else if(x

1152 二分搜尋

時間限制 1 sec 記憶體限制 128 mb 提交 2086 解決 750 提交 狀態 討論版 命題人 admin 在有序序列中查詢某一元素x。首先輸入乙個正整數n n 100000 表示該序列有n個整數,然後按從小到大的順序輸入n個整數 接著是乙個正整數m,表示有m次查詢 最後是m個整數,表示m...

1152 二分搜尋

1152 二分搜尋 時間限制 1 sec 記憶體限制 128 mb 提交 4038 解決 1794 狀態 討論版 提交 命題人 admin 題目描述 在有序序列中查詢某一元素x。輸入首先輸入乙個正整數n n 100000 表示該序列有n個整數,然後按從小到大的順序輸入n個整數 接著是乙個正整數m,表...

ZZUIL 1152 二分搜尋

在有序序列中查詢某一元素x。輸入首先輸入乙個正整數n n 100000 表示該序列有n個整數,然後按從小到大的順序輸入n個整數 接著是乙個正整數m,表示有m次查詢 最後是m個整數,表示m個要查詢的整數x。輸出對於每一次查詢,有一行輸出。若序列中存在要查詢的元素x,則輸出元素x在序列中的序號 序號從0...