线性查找
有一个数列:{1,8,10,89,1000,1234},判断数列中是否包含此名称
public static int seqSearch(int[] arr, int value) {
// 线性查找是逐一比对,发现有相同值,就返回下标
for (int i = 0; i < arr.length; i++) {
if(arr[i] == value) {
return i;
}
}
return -1;
}
二分查找
思路分析:
1,确定该数组的中间下标:mid=(left+right)/2
2,让需要查找的数findval 和 arr[mid]比较
2.1 findVal>arr[mid],说明查找的数在mid的右边
2.2 findVal<arr[mid],说明查找的数在mid的左边
2.3 findVal==arr[mid],说明找到
3,结束
3.1找到就结束递归
3.2递归完整个数组仍然没有找到findval,left>right则退出
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, mid - 1, right ,findval);
}else {
return mid;
}
}
思考: 有多个相同的数值时,如何将所有的数值都查找到