线性查找(linearSearch)与二分查找(binarySearch)比较—Java实现

一、线性查找(顺序查找)

定义:在一列给定的值中进行搜索,从一端开始逐一检查每个元素,直到找到所需元素的过程。

算法要求: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);
		}
	}
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值