2015-01-22 3 views
-1

Итак, я пишу программу, которая должна распечатать позицию в массиве и номер в этой позиции (используя линейный поиск). Вот что я получил до сих пор, но результат не был тем, что я ожидал.Распечатайте индекс и элемент

Выход:

Number 0 Linear Search Index At 0 
Number 1 Linear Search Index At 1 
Number 2 Linear Search Index At 2 
Number 2 Linear Search Index At 2 
Number 2 Linear Search Index At 2 
Number 3 Linear Search Index At 5 

Мой ожидаемый выход:

Number 0 Linear Search Index At 0 
Number 1 Linear Search Index At 1 
Number 2 Linear Search Index At 2 
Number 2 Linear Search Index At 3 
Number 2 Linear Search Index At 4 
Number 3 Linear Search Index At 5 

Код:

public class LinearSearch { 
    public int linearSearch(int[] array, int key) { 
     int size = array.length; 
     for (int i = 0; i < size; i++) { 
      if (array[i] == key) { 
       return i; 
      } 
     } 
     return -1; 
    } 

    public static void main(String[] arg) { 
     int[] array = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 8, 8, 9, 9, 9, 10, 11, 12, 13, 15, 16, 20, 21, 22, 22, 23, 24, 24, 26, 27, 27, 28, 30}; 

     LinearSearch linSearch = new LinearSearch(); 
     for (int i = 0; i < array.length; i++) { 
      System.out.println("Number " + array[i] + " " + " Linear Search Index " + 
       linSearch.linearSearch(array, array[i])); 
     } 
    } 

    } 

Любой помогает было бы здорово! Спасибо!

+0

Ваши ожидания неверны. Алгоритм ищет ** первое совпадение **. –

ответ

0

код, как вы должны это вернуть первый индекс, в котором он находит значение:

public int linearSearch(int[] array, int key) { 
    int size = array.length; 
    for (int i = 0; i < size; i++) { 
     if (array[i] == key) { 
      return i; 
     } 
    } 
    return -1; 
} 

Таким образом, если массив {1,2,2} и вы посмотрите на 2, вы всегда получить, что index 1 (для второго элемента в массиве).

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

1

i в вашей функции linearSearch() всегда начинается с 0, т.е. linearSearch() всегда начинает поиск с начала массива. Поэтому linearSearch() всегда будет возвращать первый элемент, соответствующий вашему ключу.

0

Чтобы получить предполагаемое Output вы можете просто сделать:

for (int x = 0; x < array.length; x++){ 
    System.out.println("Number " + array[i] + " " + " Linear Search Index " + x); 
} 

Ваш метод имеет две проблемы: 1. Он пытается найти первое вхождение в междунар, поэтому ваш выход перемешаны с вашего ожидания. 2. АБСОЛЮТНО не O (n). Это O (n^2), что, вероятно, вы не хотите делать в первую очередь, так как вы попросили линейного поиска.

+0

Спасибо. Итак, любое предположение, что как я могу исправить мой метод для печати моего ожидаемого результата вместо использования кода, который вы показываете выше? – BBKay

+0

Что именно вы пытаетесь сделать? –

+0

Я хочу создать метод, который находит позицию в массиве числа, присвоенного ему. Верните эту позицию. – BBKay

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