一、线性查找(顺序查找)
定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。
算法要求:1.数据存储顺序没有限制;2.存储数据类型没有限制。
代码实现:
/**
* 线性查找:顺序查找法;在给定的一列数组中,一个个查询需要的内容。
* 如果找到返回下标,如果没有找到,返回-1.
*/
import java.util.Scanner;
public class LinearSearch {
public static void main(String[] args) {
int[] array= {10,21,32,17,28,43,38,29,38,40};
System.out.println("请输入您需要的数:");
Scanner sc=new Scanner(System.in);
int target=sc.nextInt();
//保存数值的下标
int result=-1;
for(int i=0;i<array.length;i++) {
if(array[i]==target) {
result=i+1;
break;
}
}
if(result==-1) {
System.out.println("您所找的数据"+target+"在array数组中未找到!");
}else {
System.out.println("您所找的数据"+target+"在array数组中的下标为:"+result);
}
}
}
二、二分查找(折半查找)
定义: 比较有序数组中间的数据与目标数据的大小,可以得知目标数据是在数组的左边还是右边。因此,比较一次就可以把查找范围缩小一半。重复执行该操作就可以找到目标数据,或得出目标数据不存在的结论。
算法要求:1.必须采用顺序存储结构;2.必须按关键字大小有序排列。
代码实现:
/**
* 二分查找(折半查找):
* 待查询的表为有序表
*/
import java.util.Scanner;
public class BinarySearch {
public static void main(String[] args) {
int[] array= {1,3,4,6,8,9,12,15,17,21,27,29,33};
System.out.println("请输入您需要的数:");
Scanner sc=new Scanner(System.in);
int target=sc.nextInt();
// 设置左标记为0;右标记为数组长度
int left=0;
int right=array.length-1;
//保存数值的下标
int result=-1;
while(left<=right) {
//找到中间值的下标
int middle=(left+right)/2;
//若待查元素与数组中间元素相等,返回中间元素下标
if(target==array[middle]) {
result=middle+1;
break;
}
//若要查找的数值大于中间值,去掉左边的那一部分
if(target>array[middle]) {
left=middle+1;
}
//若要查找的数值大小于中间值,去掉右边的那一部分
if(target<array[middle]) {
right=middle-1;
}
}
if(result==-1) {
System.out.println("您所找的数据"+target+"在array数组中未找到!");
}else {
System.out.println("您所找的数据"+target+"在array数组中的下标为:"+result);
}
}
}