1. 程式人生 > 其它 >【HBU】7-1 二分查詢 (20分)

【HBU】7-1 二分查詢 (20分)

技術標籤:資料結構

題目描述
利用二分查詢找出所給出的數在陣列中的下標

輸入格式:
第一行輸入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; } } } }