一、线性查找
package cn.qqqking.search;
public class SeqSearch {
public static void main(String[] args) {
int arr[]={1,9,11,-1,34,89};
int i = seqSearch(arr, -12313);
if(i==-1){
System.out.println("没有找到!!!");
}else{
System.out.println(i);
}
}
public static int seqSearch(int[] arr,int value){
for (int i = 0; i < arr.length; i++) {
if(arr[i]== value){
return i;
}
}
return -1;
}
}
二、二分查找
一、介绍
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200425230849417.png)
二、思路
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200425230853482.png)
三、代码
package cn.qqqking.search;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class BinarySearch {
public static void main(String[] args) {
int arr[]={1,8,10,89,1000,1234};
System.out.println("原数组:"+Arrays.toString(arr));
int i = binarySearch(arr, 0, arr.length - 1, 1);
System.out.println("下标:"+i);
int arr2[]={1,8,10,89,1000,1000};
System.out.println("原数组:"+Arrays.toString(arr2));
ArrayList arrayList = binarySearch2(arr2, 0, arr2.length - 1, 1000);
for (Object o : arrayList) {
System.out.println("下标为:"+o);
}
}
public static int binarySearch(int arr[],int left,int right , int findVal){
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;
}
}
public static ArrayList<Integer> binarySearch2(int arr[], int left, int right , int findVal){
if(left>right){
return new ArrayList();
}
int mid = (left+right)/2;
int midVal = arr[mid];
if(findVal>midVal){
return binarySearch2(arr,mid+1,right,findVal);
}else if(findVal<midVal){
return binarySearch2(arr,left,mid-1,findVal);
}else{
ArrayList<Integer> resIndexList = new ArrayList<>();
int temp = mid-1;
while(true){
if(temp<0 || arr[temp]!=findVal){
break;
}
resIndexList.add(temp);
temp-=1;
}
resIndexList.add(mid);
temp = mid+1;
while(true){
if(temp>arr.length-1 || arr[temp]!=findVal){
break;
}
resIndexList.add(temp);
temp+=1;
}
return resIndexList;
}
}
}