алгоритм поиска с использованием часового - PullRequest
0 голосов
/ 29 мая 2010

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

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

Ответы [ 2 ]

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

Предположим, вы смотрите 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 голосов
/ 02 августа 2014
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;    
}
}

try-catch устраняет проблему подкачки с часовым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...