关于第一个索引值的搜索算法错误

时间:2014-09-12 03:11:04

标签: java

您好我正在查看以下链接中关于此搜索算法的这篇文章,当我尝试运行它时,一切正常,打印出您要搜索的数字(l)的索引值,但是如果你要搜索的数字(l)是数组中的第一个元素然后它只打印-1而不是0.需要在这个程序中进行哪些校正?让我们说int l = 3,那么它应该打印0。

以下代码来自这篇文章     jump search algorithm进行了Alex Winston所述的更正。

我完全按照这篇wiki文章http://en.wikipedia.org/wiki/Jump_search发布了有关此算法实现的内容

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;                                            //lets say int l = 3;
    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]<l){
        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;            // if this is 0, then it works but if you search for a element that is not in the array then it still prints 0 which is incorrect
}
}

1 个答案:

答案 0 :(得分:0)

该部分存在错误:

  while (a[t]<l){
        t=t+1;
        if ( t==min(b,n))    
            return   -1  ;
        if ( a[t]==l)  {
            return t;
        }
 }

对于l = 3,所以在第一个循环后t = 0a[t] == l,所以while循环a[t] < l的条件为false,所以你的程序直接返回-1没有进入循环。

您可以在进入此循环之前添加条件检查:

if(a[t] == l)
   return t;
while(a[t] < l){
  //the rest of your code.
}