二分法是一種高效的查找方法,其適用於已經排好序的數組算法
從數組最中間的數開始查找判斷,若不是須要查找的數字,則比較大小,以後則在從中間分開的兩邊中的一邊從最中間開始查找判斷,以此類推數組
這裏以升序數組爲例,降序數組相似code
這裏以升序數組爲例,降序數組相似io
# include<stdio.h> int f(int, int [], int); int main() { int n; int arr[10]={1,2,3,4,5,6,7,8,9,10}; scanf("%d", &n);//輸入要查找的數 int m=f(n, arr, 10-1); if(f(n, arr, 10-1)!=-1) printf("該數所在下標爲:%d\n", m); else printf("該數不存在\n"); } int f(int n, int a[], int h) { int i, l, mid; l = 0; while(l<=h)//注意有等號,由於可能最後一次查找就只剩一個數,則這時上下限下標相等 { mid=(l+h)/2;//計算中間下標 if(a[mid]==n)//判斷是否爲目標數 return mid; else if(a[mid]<n) l=mid+1;//若是中間數小於目標數,則將數組下限改成較大半區的下限 else h=mid-1;//若是中間數大於目標數,則將數組上限改成較小半區的上限 } return -1;//返回-1表示目標數不存在 }