我正在进行跳转搜索算法,但它告诉我元素不在数组中 这是代码
import java.math.*;
public class jamp {
public static int min(int a,int b) {
return a<b?a:b;
}
public static void main(String[]args) {
int a[]=new int[]{3,7,9,12,14,15,16,17,18};
int l=14;
System.out.println(jumpsearch(a,a.length,l));
}
public static int jumpsearch(int a[],int n, int l ) {
int t=0;
int b=(int)Math.sqrt(n);
while (a[min(b,n)-1]<t){
t=b;
b=b+(int)Math.sqrt(n);
if ( t>=n) return -1 ;
}
while (a[t]<l){
t=t+1;
if ( t==min(b,n))
return -1 ;
if ( a[t]==l) {
return t;
}
}
return -1;
}
}
请帮助
答案 0 :(得分:1)
更改
while (a[min(b,n)-1]<t){
到
while (a[min(b,n)-1]<l){ // t should be l
根据此article,该值应为搜索关键字。当我使用此更改运行程序时,我得到4。
答案 1 :(得分:0)
以下是我的跳转搜索示例(替代方法): - 希望这有帮助
>>> params Object { showQuickJumper: true, pageSize: 20, current: 1, total: 301 } Object { env: Array['prod'], incident_type: Array['loadChk'] } Object { }
答案 2 :(得分:0)
function jumpSearch($arr,$length,$searched_value){
$step=sqrt($length);
for($i=0;$arr[$i]<=$searched_value;$i=$i+$step){
if($arr[$i]==$searched_value){
return $i;
}else{
$last_up=$i;
}
}
$s=$last_up+1;
$l=$s+$step;
for($i=0;$i<=$l;$i++){
if($arr[$i]==$searched_value){
return $i;
}
}
}
$arr=array(0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610);
$length=count($arr);
$searched_value=34;
$result=jumpSearch($arr,$length,$searched_value);
if($result==-1){
}else{
echo "Search Found at ".$result;
}