我正在尝试使用哨兵进行搜索算法,将时间减少到3.87n纳秒 例如,与此代码比较
int search (int t ){
for (int i=0;i<n;i++)
if (x[i]==t)
return i;
return -1;
}
需要4.06纳秒
所以我想在这里优化它是代码
public class Search{
public static int search(int a[], int t) {
int i;
int p=0;
int n=a.length;
int hold;
hold=a[n-1];
a[n-1]=t;
for ( i=0;;i++)
if (a[i]==t) break;
a[n-1]=t;
if (i==n){
p= -1;
} else{
p= i;
}
return p;
}
public static void main(String[]args){
int t=-1;
int a[]=new int[]{4,5,2,6,8,7,9};
System.out.println(search(a,t));
}
}
但是告诉我,9位于第6位,这是正确的,但如果t = 1或其他不是阵列的东西,它也显示我的位置6请帮助
答案 0 :(得分:1)
假设您在数组t=-1
中查找a = [4,5,2,6,8,7,9]
。
你问,为什么结果是6。
看,
public class Search {
public static int search(int a[], int t) {
int i;
int p=0;
int n=a.length; // n = 7
int hold;
hold=a[n-1]; // hold = a[6] = 9; a[6] - is the last element.
a[n-1]=t; // a[6] = -1;
for ( i=0;;i++)
if (a[i]==t) break; // it will break, when i = 6, cause a[6] = -1;
// after this root finished, i = 6.
a[n-1]=t; // a[6] = -1; again ^^
if (i==n){ // i!=n, 6!=7.
p= -1;
} else{ // this branch will work.
p= i; // p = 6;
}
return p; // return 6;
}
答案 1 :(得分:-1)
public class Search {
public static int search(int a[], int t) {
int i=0;
try {
for(i=0;;i++)
if(t==a[i])
return i;
}
catch(ArrayIndexOutOfBoundsException e)
return -1;
}
}
try-catch删除了与sentinel的交换问题