算法-二分查找极其效率

简介: 因为二分查找是一半一半的找,所以每次查找之后都会把查找范围减半;比如说在一个 1 - 8 的有序数组里面查找 8 也就是查找最坏情况。在数组当中完成二分查找需要 log2n - 1 次;也就是时间复杂度是 log2n (就是 log 以 2 为底 n 的对数)

算法说明

又叫折半查找,要求待查找的序列有序。
每次取中间位置的值与待查关键字比较;
如果中间位置的值比待查关键字大,则在前半部分循环这个查找的过程;
如果中间位置的值比待查关键字小,则在后半部分循环这个查找的过程。
直到查找到了为止,否则序列中没有待查的关键字。

示例代码

/**
 * 二分查找算法实现,返回查找数据在数组的序号。
 * @param array 数据
 * @param num 需要查询的数据
 * @return 数据序号
 */
public static int biSearch(int[] array, int num) {
    int start = 0;
    int end = array.length - 1;
    int mid;
    while(start <= end) {
        mid = (start + end) / 2;
        if(array[mid] == num) {
            return mid;
        } else if(array[mid] < num) {
            start = mid + 1;
        } else {
            end = mid - 1;
        }
    }
    return -1;
}

调用示例:

public static void main(String[] args) {
    int[] array = { 1, 2, 4, 6, 8, 9, 10, 11, 12, 34, 55};
    int biSearch = biSearch(array, 9);
    System.out.println(biSearch);
}

算法复杂度

因为二分查找是一半一半的找,所以每次查找之后都会把查找范围减半;
比如说在一个 1 - 8 的有序数组里面查找 8 也就是查找最坏情况。
在数组当中完成二分查找需要 log2n - 1 次;
也就是时间复杂度是 log2n (就是 log 以 2 为底 n 的对数)

相关文章
|
4月前
|
算法 测试技术 索引
算法-二分查找
算法-二分查找
36 0
|
1月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
1月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
1月前
|
算法
【算法】二分查找——二分查找
【算法】二分查找——二分查找
|
2月前
|
算法
【算法】二分查找(整数二分和浮点数二分)
算法学习——二分查找(整数二分和浮点数二分)
29 0
【算法】二分查找(整数二分和浮点数二分)
|
3月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
3月前
|
机器学习/深度学习 算法 索引
数据结构算法--1 顺序查找二分查找
**顺序查找时间复杂度为O(n)**,适合无序列表,可以通过`enumerate`或直接遍历索引来实现。**二分查找时间复杂度为O(logn)**,适用于有序列表,利用Python中`left`、`right`指针和`mid`点不断缩小搜索范围。效率上二分查找更优。
|
3月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
36 1
|
3月前
|
算法 搜索推荐 Java
二分查找算法详解及实现
二分查找算法详解及实现
44 2
|
2月前
|
算法 JavaScript
JS 【算法】二分查找
JS 【算法】二分查找
25 0