二分查找是一种比较快的查找方式,它的第一次查找是取中间值,判断是否与中间值相同,如果是递增的序列,小于中间值则查找左边的序列,大于则查找右边的序列,递减的序列则与此相反,注意,二分查找只适用于有序序列。
递归算法
<span style="color:#3333ff;">int found(int a[],int key,int low,int high) //low为0,high为n-1 { int mid; while(low <= high) { mid = (low + high)/2; //mid为中间值 if(a[mid] == key) return mid; if(a[mid] > key) //中间值大于关键值,在左边查找 return found(a,key,low,mid-1); if(a[mid] < key) //中间值小于关键值,在右边查找 return found(a,key,mid+1,high); } return -1; //没有查找到关键值,返回-1 }</span>
非递归算法
<span style="color:#3333ff;">int found(int a[],int key,int low,int high) //low为0,high为n-1 { int mid; while(low <= high) { mid = (low + high)/2; //mid为中间值 if(a[mid] == key) return mid; if(a[mid] > key) //中间值大于关键值,在左边查找 return high = mid-1; if(a[mid] < key) //中间值小于关键值,在右边查找 return low = mid + 1; } return -1; //没有查找到关键值,返回-1 }</span>