有n個數(n<=1000000),這n個數已按從大到小順序存放在乙個陣列中,然後有t次查詢,每次輸入乙個數,要求用折半查詢法找出該數在陣列中第一次出現的位置。如果不在陣列中輸出0。
第一行陣列元素的個數n
第二行n個陣列元素的值
第三行輸入查詢次數t (t<=100000)
往下有t行,每行輸入乙個需要查詢的數字
查詢的值在陣列中的位置
10
10 9 8 7 6 5 4 3 2 129
5
2
6
注意:陣列空間為1000000和100000
這個本來是乙個原來的練習題,當時坑了好久,今天再來回味一下,這個題有很多坑點
用cin和cout是過不了的
這個題可能有很多的重複數字,仔細看題目要求就可以得到 找到某個數第一次出現的位置,所有你找到這個數不要高興,還得往前找,此外還需要注意迴圈條件 left以查詢 9為例 假如加上等於號
left right mid
1 10 5
1 5 3
1 3 2 此時a[mid]<=9 ,a[mid]就是 9,right =mid =2;
1 2 1 此時 a[mid]=10>9; left=mid+1;
2 2 2 此時 a[mid]= 9=9; right=mid=2;
2 2 2 .......進入死迴圈 gg
#includeusing namespace std;
const int maxn=1000000+10;
int a[maxn],n,m,x;
int getpos(int x)
if(a[left]==x)
return left;
return 0;
}int main()
;int a[maxn];
int n;
int b_search(int val)
if (a[ans] != val)
return 0;
else
return ans;
}bool cmp(int a, int b)
int main()
return 0;
}
查詢 折半查詢
折半查詢 int search keytype key,int n,keytype k return 1 查詢失敗,返回 1 在演算法中,n表示記錄的個數。key表示要查詢的關鍵字。key為關鍵字順序表,每個元素都是對應記錄的關鍵字。例如key 0 為第0個記錄的關鍵字。如果每條記錄的資訊與它的關鍵...
查詢之折半查詢
二分查詢又稱折半查詢,優點是比較次數少,查詢速度快,平均效能好 其缺點是要求待查表為有序表,且插入刪除困難。因此,折半查詢方法適用於不經常變動而查詢頻繁的有序列表。首先,假設表中元素是按公升序排列,將表中間位置記錄的關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置記錄將表分成前 後...
查詢之折半查詢
折半查詢又稱二分查詢,適用有序的順序表。附 筆試考察查詢,這個是經典查詢法 基本思路 首先給定值key與表中中間位置元素的關鍵字,若相等則查詢成功,返回位置。若不等,則所需查詢的元素只能在中間元素外的前半部分或後半部分中。縮小範圍,遞迴查詢。2.折半查詢的 int binary search seq...