查找——顺序查找

4 篇文章 0 订阅

简单的顺序查找有两种:

一种是直接查找

public static int seqSearch01(Object[] a, Object x, int n){
		int i;
		for (i = 0; i < n; i++) {
			if(a[i].equals(x))
				break;
		}
		if(i<n)
			return i;
		return -1;
	}

另一种是设置岗哨,这样就省去了判断是否越界的步骤,时间大大缩短了

public static int seqSearch02(Object[] a, Object x, int n){
		a[n]=x;
		int i;
		for (i = 0;; i++) {
			if(a[i].equals(x))
				break;
		}
		if(i<n)
			return i;
		return -1;
	}



我用第二种方法减掉第一种方法的时间做测试

首先,生成Object数组a(这里为了看的清晰,用10K做测试)

private static final int MAX_LENGTH = 10000;
	private static final int N=MAX_LENGTH-1;
	
	static Object[] a = new Object[MAX_LENGTH];
	
	static{
		for(int i=0;i<MAX_LENGTH;i++){
			a[i]=i+1;
		}
	}


然后写出测试函数

public static void seqSearch(Object x){
		System.out.println("===========顺序查找============");
		// 顺序查找01
		long b = System.nanoTime();
		int m = SequentialSearch.seqSearch01(a, x, N);
		System.out.println("数组元素的下标为:" + m);
		long time01 = System.nanoTime()-b;
		// 顺序查找02
		b=System.nanoTime();
		m = SequentialSearch.seqSearch02(a, x, N);
		System.out.println("数组元素的下标为:" + m);
		long time02 = System.nanoTime()-b;
		System.out.println("时间差值为:"+(time01-time02)+"μs");
	}

设置x=9998,来看一下测试结果:

时间差值为:2680726μs

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值