一 顺序查找
优点:代码简单容易理解,挨个比较,数据靠前效率高
缺点:随机查询效率低
代码实现:
public static void main(String[] args) {
int[] arr={1,5,6,7,8,9,70};
int a=10;
int result= binarySearch(arr,a);
System.out.println(result);
}
//传统查找方式
public static int search(int[] arr,int a){
for(int i=0;i<arr.length;i++){
if(arr[i]==a)
return i;
}
return -1;
}
二分查找
1 建立在排序的基础上
2 用于查找固定有序的数据
实现原理:每次和中间值比较
1 确定起始下标和结束下标
2 确定中间值和目标数据开始比较
3 如果相等,返回中间下标
4 如果大于目标数,起始值=中间值+1,结束值不变
5 如果小于目标数,起始值不变,结束值=中间值-1
6 当起始值大于结束值时,说明不存在
//二分查找
public static int binarySearch(int[] arr,int a){
// 1 确定起始下标和结束下标
int count=0;
int start=0;
int end=arr.length-1;
// 2 确定中间值和目标数据开始比较
int mid=(start+end)/2;
while(start<=end){
count++;
// 3 如果相等,返回中间下标
if(a==arr[mid]){
System.out.println("二分查找:"+count);
return mid;
}
// 5 如果小于目标数,起始值不变,结束值=中间值-1
if(a<arr[mid]){
end=mid-1;
mid=(start+end)/2;
}
// 4 如果大于目标数,起始值=中间值+1,结束值不变
if(a>arr[mid]){
start=mid+1;
mid=(start+end)/2;
}
}
// 6 当起始值大于结束值时,说明不存在
System.out.println(count);
return -1;
}