首页 文章

一种结合线性搜索和二分搜索的搜索算法

提问于
浏览
0

正如 Headers 所说,我想制作一个结合了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);
}

}

1 回答

  • 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;
    

相关问题