在有序序列中查詢某一元素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...