2010-05-29 2 views
0

я пытаюсь сделать алгоритм поиска с помощью дозорных, которые снижают время 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, который является правильным, но если т = 1 или что-то другое, что не является массивом этого шоу я позиция 6 тоже, пожалуйста, помогите

+2

Можете ли вы перефразировать ваш вопрос немного более полированным английском? И переформатируйте фрагмент кода, я не могу поверить, что все эти пробелы необходимы. – Pieter

+0

Ваш второй алгоритм не будет работать быстрее. – Max

+0

http://stackoverflow.com/questions/2496013/is-this-linear-search-implementation-actually-useful – helpermethod

ответ

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

Это значит, что этот код работает правильно? –

+0

Это означает, что этот код работает так, как он должен работать (но он не ищет символ правильно). Не пишите свои собственные методы, используйте уже существующие. – Max

+1

ok спасибо, но это не мое. Это от программирования жемчуга. –

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

примерки задвижка снимает проблему swaping с дозорных

+0

Не следует использовать исключения для потока управления или в качестве замены для проверки предварительных условий, таких как 'i

Смежные вопросы