java语言程序设计基础篇——一维数组(3)【线性查找法】【二分查找法】

本文通过生成10万个随机整数并使用线性搜索与二分搜索方法进行查找,对比两种搜索方法的执行效率。实验首先采用未排序数组进行线性搜索,再对数组排序后进行二分搜索,并记录每次搜索的执行时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(执行时间)编写程序,随机产生100000个整数值和一个关键字。估算一下调用程序清单6-6中的linearSearch方法的执行时间。对该数组进行排序,然后估算调用程序清单6-7中的binarySearch方法的执行时间。可以使用下面的代码模板获取执行时间:

long startTime = System.currentTimeMillis();

perform the task;

long endTime = System.currentTimeMillis();

long executionTime = endTime - startTime;

线性查找法(Linear Search):将要查找的关键字key与数组(数组中的元素可以任意顺序排列)中的元素逐个进行比较。这个过程持续到在列表中找到与关键字匹配的元素,或者查完列表也没有找到关键字为止。如果匹配成功,线性查表法返回与关键字匹配的元素在数组中的下标。如果没有匹配成功,则返回-1.

public class LinearSearch {
	public static int linearSearch(int[] list , int key){
		for(int i=0;i<list.length;i++){
			if(key == list[i])
				return i;
		}
		return -1;
	}
}
二分查找法(Binary Search)数组中的元素必须已经排好序

将关键字与数组的中间元素进行比较,

如果关键字小于中间元素,只需要在数组的前一半元素中继续查找关键字;

如果关键字等于中间元素,则匹配成功,查找结束;

如果关键字大于中间元素,只需要在数组的后一半元素中继续查找关键字

线性查找法适用于在小数组或没有排序的数组中查找,但是对大数组而言效率不高。

二分查找法的效率较高,但它要求数组已经排好序。

public class BinarySearch {
	public static int binarySearch(int[] list,int key){
		int low =0;
		int high=list.length-1;
		while(high>=low){
			int mid=(low+high)/2;
			if(key<list[mid])
				high=mid-1;
			else if(key==list[mid])
				return mid;
			else 
				low=mid+1;
		}
		return -low-1;
	}

}
import java.util.Arrays;

public class Exercise6_16 {
	public static void main(String[] args){
		int[] list = new int[100000];
		for(int i=0;i<100000;i++){
			list[i]=(int)(Math.random()*100001);
		}
		int key=(int)(Math.random()*100001);
		
		long startTime = System.currentTimeMillis();
		System.out.println(LinearSearch.linearSearch(list,key));
		long endTime = System.currentTimeMillis();
		long executionTime = endTime - startTime;
		System.out.println("Execution time for linearSearch is: "+executionTime);
		
		Arrays.sort(list);
		startTime = System.currentTimeMillis();
		System.out.println(BinarySearch.binarySearch(list,key));
		endTime = System.currentTimeMillis();
		executionTime = endTime - startTime;
		System.out.println("Execution time for binarySearch is: "+executionTime);
	}

}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值