二分查找两种实现方式(java实现)

 1    二分查找又叫折半查找:优点是:查找的次数少,查找的速度快,平均性能好。缺点是:要求带查表为有序表,且删除插入困难,因此二分查找适用于不经常变动并且查找频繁的有序列表。

2    算法要求:必须采用顺序存储结构,必须按照关键字大小顺序排列。   

3    时间复杂度o(logn)

4    算法的思想:

(1)在有序表中,搜索先从中间的元素开始查找,如果中间的元素等于查找的元素,则查找成功;

 (2)如果输入的要查找的元素大于数组中间的元素,则在数组的右面查找,反之,在数组的左面查找;

  (3)不断重复上述过程,直到重复上述过程,直到查找成功,或者查找区域无此记录,查找失败;

代码实现:

public class BinarySearch { 
    /** 
    * 二分查找算法 
    * 
    * @param srcArray 有序数组 
    * @param key 查找元素 
    * @return key的数组下标,没找到返回-1 
    */  
    public static void main(String[] args) { 
        int srcArray[] = {3,5,11,17,21,23,28,30,32,50,64,78,81,95,101};   
        System.out.println(binSearch(srcArray, 0, srcArray.length - 1, 81));  
    } 
     
    // 二分查找递归实现   
    public static int binSearch(int srcArray[], int start, int end, int key) {   
        int mid = (end - start) / 2 + start;   
        if (srcArray[mid] == key) {   
            return mid;   
        }   
        if (start >= end) {   
            return -1;   
        } else if (key > srcArray[mid]) {   
            return binSearch(srcArray, mid + 1, end, key);   
        } else if (key < srcArray[mid]) {   
            return binSearch(srcArray, start, mid - 1, key);   
        }   
        return -1;   
    } 
     
    // 二分查找普通循环实现   
    public static int binSearch(int srcArray[], int key) {   
        int mid = srcArray.length / 2;   
        if (key == srcArray[mid]) {   
            return mid;   
        }   
  
        int start = 0;   
        int end = srcArray.length - 1;   
        while (start <= end) {   
            mid = (end - start) / 2 + start;   
            if (key < srcArray[mid]) {   
               end = mid - 1;   
            } else if (key > srcArray[mid]) {   
                start = mid + 1;   
            } else {   
                return mid;   
            }   
        }   
return  -1;
}
}
    

猜你喜欢

转载自blog.csdn.net/qauchangqingwei/article/details/80881030
今日推荐