2010-05-21 5 views
1

я делаю алгоритм поиска прыжок, но это показывает мне, что элемент не в массиве, а это здесь кодпрыжок алгоритм поиска

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; 
    } 
} 

пожалуйста, помогите

+5

Дружеский совет: прекратить давать переменные одно имя письма, это делает код, который вы создаете, очень трудно проникать, даже если его мало. Попадая в привычку правильно называть ваши переменные, вы гарантируете, что будущие прикомандисты будут счастливыми отдыхающими. –

+0

Используйте отладчик, который вы можете найти в наиболее известных Java IDE, таких как Eclipse или NetBeans, для прохождения кода по строкам и следить за тем, что происходит. – Jesper

ответ

1

Изменить

while (a[min(b,n)-1]<t){ 

до

while (a[min(b,n)-1]<l){ // t should be l 

В соответствии с этим article это значение должно быть ключом поиска. При запуске программы с этим изменением я получаю 4.

+0

спасибо большое –

0

Вот мой пример Пример Джамп поиска (альтернативный подход): - Надеюсь, что это помогает

public class JumpSearch { 
    public static void main(String[] args) { 
     int[] arr= {0,1,2,3,4,5,5,9,12,14,15,15}; 
     System.out.println("Element found at: "+search(arr,15)); 
    } 
    public static int search (int[] arr,int key){ 
     int length= arr.length; 
     int start=0; 
     int jump=(int) Math.sqrt(length); 
     for(int i=0;i<length;i+=jump){ 
      if(arr[i]==key){ 
       return i; 
      } 
      else if(arr[i]>key){ 
       start=arr[i-jump]; 
       break; 
      }else{ 
       start=i+1; 
      } 
     } 
     for(int i=start;i<arr.length;i++){ 
      if(arr[i]==key){ 
       return i; 
      } 
     } 
     return -1; 
    } 
} 
Смежные вопросы