查找——顺序查找

简单的顺序查找有两种:

一种是直接查找

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

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页