正如标题所说,我想制作一个结合了linearSearch和binarySearch的搜索算法。如果数组少于20个元素,我想使用linearSearch,否则使用二进制搜索。
- 数组应该排序。
- 数组是Comparable类型的元素。
- 算法应返回找到元素的索引,否则应返回-1
我的代码,但我有点卡住..我是在正确的轨道上吗?
public class SearchAlgorithm<T extends Comparable<T>> {
public int linearSearch(T[] Array, T find){
int temp = 0;
for(int i = 0; i < Array.length; i++){
if(Array[i] == find){
temp = i;
}
else{
temp = -1;
}
}
return temp;
}
public int binarySearch(T[] Array, T find){
int lowIdx = 0;
int highIdx = Array.length-1;
int middleIdx = 0;
while(lowIdx <= highIdx){
middleIdx = (highIdx + lowIdx)/2;
int comp = find.compareTo(Array[middleIdx]);
if(comp < 0)
lowIdx = middleIdx + 1;
else if(comp > 0)
highIdx = middleIdx -1;
else{
lowIdx = highIdx+1;
return middleIdx;
}
}
return -1;
}
public void combinedSearch(T[] Arr, T find){
long startTime = System.currentTimeMillis();
if(Arr.length < 20){
linearSearch(Arr,find);
}
else{
binarySearch(Arr,find);
}
long endTime = System.currentTimeMillis();
System.out.println("combinedSearch took: "+(endTime-startTime)+ "ms");
}
public static void main(String[] args){
int[] a = {1,2,3,4,5};
binarySearch(a,4);
}
}
答案 0 :(得分:0)
用于线性搜索
if(Array[i] == find){
temp = i;
}
else{
temp = -1;
}
每次不匹配时将其设置为-1。它应该是这样的:
int temp = -1;
for(int i = 0; i < Array.length; i++){
if(Array[i] == find){
temp = i;
return temp;
}
}
return temp;
同样对于二进制搜索,您应该反转比较。你发现的数字是左半部分,如果它小于中等,等等。
if(comp > 0)
lowIdx = middleIdx + 1;
else if(comp < 0)
highIdx = middleIdx -1;