线性查找
主要思想:
一一比对 找出相同的
public static int seqSearch(int arr[],int value){
//查询到返回坐标 没查询到则返回-1
for (int i = 0; i < arr.length; i++) {
if (arr[i]==value){
return i;
}
}
return -1;
}
二分法查找 (前提是有序数列)
主要思想:
利用中间值 大的右边找 小的左边找
public static int binarySearch(int[] arr,int left,int right,int value){
int mid=(left+right)/2;
int midvalue=arr[mid];
if (left>=right){
return -1;
}
if (value>midvalue){//左递归
return binarySearch(arr,mid+1,right,value);
}else if (value<midvalue){//右递归
return binarySearch(arr,left,mid-1,value);
}else {//相等就出来
return mid;
}
}
插值法查找 (二分法查找的基础)
主要思想:
把mid的取值换成更贴近的
原来的:
更换后:
public static int binarySearch(int[] arr,int left,int right,int value){
if (left>=right){
return -1;
}
int mid=left+(right-left)*(value-arr[left])/(arr[right]-arr[left]);
int midvalue=arr[mid];
if (value>midvalue){//左递归
return binarySearch(arr,mid+1,right,value);
}else if (value<midvalue){//右递归
return binarySearch(arr,left,mid-1,value);
}else {//相等就出来
return mid;
}
}