简单的顺序查找有两种:
一种是直接查找
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