алгоритм поиска прыжков - PullRequest
1 голос
/ 21 мая 2010

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

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

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

Ответы [ 2 ]

1 голос
/ 21 мая 2010

Изменение

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

до

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

Согласно этой статье это значение должно быть ключом поиска. Когда я запускаю программу с этим изменением, я получаю 4.

0 голосов
/ 01 апреля 2017

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

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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...