(1)顺序查找
也就是按顺序一位一位的查找
public static void main(String[] args) {
System.out.println("输入一个数");
Scanner scan = new Scanner(System.in);
int num= scan.nextInt();
int[]arr = {2,4,6,8,10,12,14,16};
int sign= find(arr,num);
if(-1 == sign){
System.out.println("没有找到");
}else {
System.out.println(sign);
}
}
/**
* 数组查找与num相等的数
* @param arr 待查找数组
* @param num 待比较的数
* @return -1:没有找到 >=0:下标
*/
private static int find(int[] arr, int num) {
int count= 0;
for (int i:arr){
if(i== num){
returncount;
}
count++;
}
return -1;
}
弊端:数据量大的时候,在最差的情况下,计算机的负载也非常大,效率低。
(2)折半查找(二分查找)
public static void main(String[] args) {
System.out.println("输入一个数");
Scanner scan = new Scanner(System.in);
int num= scan.nextInt();
int[]arr = {2,4,6,8,10,12,14,16};
int index= halfOfFind(arr,num);
if(-1 == index){
System.out.println("没找到");
}else {
System.out.println(index);
}
}
/**
*
* @param arr 待查找数组
* @param num 待比较的数
* @return -1:没找到 >=0:下标
*/
private static int halfOfFind(int[] arr, int num) {
int start= 0;
int end= arr.length-1;
while (start<=end){
int mid= (start+end)/2;
if(arr[mid]== num){
returnmid;
}elseif(arr[mid] > num){
end = mid-1;
}else{
start = mid+1;
}
}
return -1;
}
弊端:必须对有序的数组进行操作