二分查找
递归和非递归的二分查找:
//非递归二分查找算法 /*list:待查找的有序数组 *key:需要查找的元素 *n:数组长度 *return:返回查找的位置下标,返回-1表示未找到 */ int binarySearch(element list[], element key, int n) { int left =0; int right = n-1; int mid=0; while(left <= right)// <=,不能遗漏等于的情况 { mid=(left+right)/2; if(list[mid] == key) return mid; else if(list[mid] < key) left=mid+1; else right=mid-1; } return -1; } //递归二分查找算法 /*list:待查找的有序数组 *key:需要查找的元素 *left:数组下界 *right:数组上界 *return:返回查找的位置下标,返回-1表示未找到 */ int binarySearch2(element list[], element key, int left, int right) { int mid=0; if(left<=right)// <=,不能遗漏等于的情况 { mid=(left+right)/2; if(list[mid] == key) return mid; else if(list[mid] < key) return binarySearch2(list, key, mid+1, right); else return binarySearch2(list, key, left, mid-1); }else{ return -1;/*注意如果没有这种情况,返回值是永远是 mid,*/ } }