二分查找的思想是:我们设置三个指针low,mid和high,low指向数组的第一个元素,mid指向数组中间元素,high指向数组最后一个元素。每次用待查元素和中间元素比较,如果待查元素比中间元素小,那么我们更新high = mid - 1,如果待查元素比中间元素大,那么我们更新low = mid + 1,如果待查元素和中间元素相等,那么我们返回mid。重复上述过程,直到检索成功或检索区间长度为0(low = high || low > high)。二分查找的时间复杂度为o(logN)。#include<iostream> using namespace std; //二分查找返回下标 int BinSearch01(int arr[],int len,int val) { if(arr == NULL || len <= 0)//判断参数是否合法 return -1; int low = 0;//指向数组第一个元素下标 int high = len - 1;//指向数组最后一个元素的下标 int mid = 0; while(low <= high) { mid = (low + high) / 2;//指向数组中间元素的下标 if(arr[mid] < val)//如果待查元素在mid之后 { low = mid + 1; } else if(arr[mid] > val)//如果待查元素在mid之前 { high = mid - 1; } else { return mid; } } return len;//如果找不到则返回数组的长度 } int main(void) { int arr[] = {1, 3, 5, 7, 9}; cout<<BinSearch01(arr,5,3)<<endl; system("pause"); return 0; }
int BinSearch(int arr[],int low,int high,int val) { if(low <= high) { int mid = (low + high) / 2; if(arr[mid] < val) { return BinSearch(arr,mid+1,high,val); } else if(arr[mid] > val) { return BinSearch(arr,low,mid-1,val); } else { return mid; } } return -1; }
二分查找(递归与非递归)
最新推荐文章于 2023-06-25 18:31:12 发布