
这就是一个查找问题,这个时候就可以使用二分查找算法。
二分查找是一种算法,其是对一个有序的元素列表进行查找(查找对象必须有序)。



public class BinarySearch {
public static void main(String[] args) {
//注意使用二分查找的前提是,该数组是有序的
int arr[]={1,8,10,89,1000,1234};
int resIndex=binarySearch(arr,0,arr.length-1,89);
System.out.println("resIndex:"+resIndex);
}
//二分查找
/**
*
*
* @param arr 需要进行查找的数组
* @param left 查找范围的最左边索引值,动态变化,初始值是0
* @param right 查找范围的最后边索引值,动态变化,初始值是数组的最大索引值
* @param findVal 需要查找的值
* @return
*/
public static int binarySearch(int[] arr,int left,int right,int findVal){
//当left>right的时候,说明递归结束,但是没有找到
if(left>right){
return -1;
}
int mid=(left+right)/2;
int midVal=arr[mid];
if (findVal>midVal){
return binarySearch(arr,mid+1,right,findVal);
}else if(findVal<midVal){
return binarySearch(arr,left,mid-1,findVal);
}else{
return mid;
}
}
}
#include
int binarySearch(int arr[],int left,int right,int findVal) {
//出口
//当left
if(left>right)
{
return -1;
}
//int mid = (left + right) / 2;
int mid = left + (right - left) / 2;//防止数据过大,越界
int midVal = arr[mid];
//当需要查找值大于中值时候,需要向右递归
if (findVal>midVal) {
return binarySearch(arr, mid + 1, right,findVal);
}else if(findVal<midVal)
{
//当需要查找值小于中指的时候,须有向左递归
return binarySearch(arr, left, mid - 1, findVal);
}else
{
return mid;
}
}
int main()
{
int arr[10] = { 1,2,3,4,5,6,7,8,9,10 };
//查找范围的最左边索引和最右边索引是动态变化的
int left = 0;
int right = sizeof(arr) / sizeof(arr[0]) - 1;
std::cout << binarySearch(arr,left,right,0) << std::endl;
}