2012-04-17 6 views
0

У меня есть пять массивов, где я хранить входящие ИНТ номера типа:Java Поиск элементов в массиве

int array1 = {1,6,..} 
int array2 = {2,7,..} 
. 
. 
int array5 = {5,10,..} 

Теперь, что я должен сделать, поиск ближайших номеров в других массивах.

Мол,

for(i = 0, i < array1.size ; i++){ 

int element = array1[0] ; 

//here array2, array3, ..., array5 can have different size 
search for array2 to find element+1 
search for array3 to find element+2 
. 
. 
search for array5 to find element+5 
} 

Что я делаю прямо сейчас:

Run for loop for 0 to array2 size, to find element+1 (so for others) 

Однако, это довольно медленно. Может кто-нибудь дать мне некоторое представление, как сделать это быстрее (я могу изменить массив и на любую другую структуру данных).

К сожалению, я делаю две ошибки, в то время как спрашивая, что я должен отметить:

1) Arrays are sorted (incremental elements always). 
2) Array elements are very few (2-3) so Binary Search will be expensive. 
3) I have to perform the search for thousand times means when channel input pause, I have to perform search, then again channel start and I have to perform search ... so on. 
+0

Ваши числа всегда увеличиваются на фиксированную сумму (5 в данном примере)? –

+0

Используйте 'for (int i = 0, ...)' в своих циклах for, иначе вам известно, что ваша переменная 'i' может быть изменена где-то еще в вашем методе. – Ozzy

+0

@ Оззи, нет, я делаю это. Мои коды o/P верны. Нет проблем с этим. Я хочу быстрее. – Arpssss

ответ

4

Если массивы отсортированные, использовать бинарный поиск, чтобы найти элемент, вместо зацикливания через него для каждого отдельного элемента.

+0

Ваш ответ правильный. Но я забыл кое-что упомянуть. Я изменил свой вопрос. – Arpssss

+1

Если размер массива всегда очень мал, то линейный поиск, который вы уже делаете, - лучший способ сделать это. –

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