【HBU】7-1 二分查詢 (20分)
阿新 • • 發佈:2020-12-27
技術標籤:資料結構
題目描述
利用二分查詢找出所給出的數在陣列中的下標
輸入格式:
第一行輸入n和m表示陣列有n個數據,m表示要對m個數進行查詢
輸出格式:
所有輸出在一行完成,行末沒有多餘空格和多餘回車。
輸入樣例:
5 5
1 2 3 4 5
1 2 3 4 5
輸出樣例:
0 1 2 3 4
格外要注意mid=low+(high-low)/2,而不是mid = (low+high)/2,否則可能計算溢位;原因是int型別最大表示範圍是2147483647
如果輸入的low和high都接近2147483647,兩個數相加就會溢位,變成一個負數。
#include <iostream>
using namespace std;
int main() {
int n, m;
scanf("%d %d", &n, &m);
int a[n];
for(int i = 0; i < n; i++) scanf("%d", &a[i]);
for(int i = 0; i < m; i++) {
int t;
scanf("%d", &t);
if(i) printf(" ");
int low = 0, high = n-1;
while (low <= high) {
int mid = low+(high-low)/2;
if(a[mid] == t){
printf("%d", mid);
break;
}
else if(a[mid] > t){
high = mid-1;
}
else if(a[mid] < t) {
low = mid+1;
}
}
}
}