所以我正在编写一个程序,用于打印出数组中的位置和该位置的数字(使用线性搜索)。这是我到目前为止所得到的,但输出并非我的预期。
输出:
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 :(得分:1)
i
函数中的 linearSearch()
始终从0开始。 linearSearch()
始终从数组的开头开始搜索。因此,linearSearch()
将始终返回与您的密钥匹配的第一个元素。
答案 1 :(得分: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
,那么总是获取索引1
(对于数组中的第二项) )。
除非数组元素是唯一的,否则在一般情况下无法解决这个问题。在查找有多个元素的元素时,您必须做出某些决定您要使用哪个元素。
答案 2 :(得分:0)
要检索预期的输出,您只需执行以下操作:
for (int x = 0; x < array.length; x++){
System.out.println("Number " + array[i] + " " + " Linear Search Index " + x);
}
您的方法有两个问题: 它试图找到int的第一次出现,这就是为什么你的输出与你的预期混淆的原因。 2.绝对不是O(n)。它是O(n ^ 2),这可能是你首先想做的事情,因为你要求进行线性搜索。