編寫一個折半查找函數數組
#include<stdio.h> //編寫折半查找函數 int binsearch(int a,int num[],int b ) { int left=0,right=b-1,mid=0; while(left<=right) { int mid=(left+right)/2; if (num[mid]<a) { left=mid+1; } else if (num[mid]==a) { return mid; } else { right=mid-1; } } return -1; } int main() { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; int key = 0; int sz = sizeof(arr) / sizeof(arr[0]); printf("請輸入你想找的數字:\n"); scanf("%d", &key); int ret = binsearch(key, arr, sz); if (ret == -1) { printf("不存在!\n"); } else { printf("%d在數組中爲arr[%d]\n", key,ret); } return 0; }
在這個代碼中最重要的是理解折半查找的含義,分析每次循環的條件判斷,當key>mid時,安全
left應該右移一次;檔key<mid時,right應該左移一次;還有須要注意的是,用mid=left+right的方法並非很安全,有可能會溢出,另外,折半查找只適用於一個有序的數組中查找具體的數字。ide
注意在選擇right的值時,若是right=size,則下面的while循環應該改成while(left<right),當所要查找的數據小於mid時,right=mid,而不是right=mid-1;函數