1.二分查找(折半查找)
1.1 要求:
i.序列有序
ii.可以随机访问,也就是顺序表的数据,而链表存储不能使用这个方法。
1.2 时间复杂度: log(N)
1.3 原理过程和代码
二分查找算法是针对以及排序好的数据进行查找,当查找一个数时,选择中间的一个数据作为比较,同时划分为左子数组合,右子数组,算法思想步骤如下:
i.如果中间值等于查找值,则返回中间值的下标index;
ii.如果查找值小于中间值,那么在左子数组进行查找,重复此过程如果查找值大于中间值,那么在右子数组进行查找,重复此过程。
中间值的下标计算方式:
其中low是指小数的小标,大数的下标。非递归具体代码如下:
int binarysearch(int arr[],int len,int n){
int low=0;
int high=n-1;
int mid;
while(low<=high){
mid=low+(high-low)/2;//这里用(high+low)/2也行
if(arr[mid]==n)
return mid;
else if(arr[mid]<n)
low=mid+1;
else
high=mid-1;
}
return -1;
}
其中n为要查找的数据,len为数组长度,low,high,mid为下标。
此代码可以写成递归方式:
int binarysearch_recursive(int arr[],int start,int end,int n){
int mid=(end+start)/2;
if(arr[mid]==n)
return mid;
else if(ar