码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找

时间:2019-01-01 11:43:13      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:中间   折半查找   sea   数据集   线性表   复杂度   获得   二分查找   算法   

说明:元素必须是有序的,如果是无序的则需要先进行排序操作;

基本思想:
也称为折半查找,属于有序查找算法。用给定值k先与中间节点的关键字比较,中间节点把线形表分成两个子表,若相等则查表成功;若不相等,再根据k与该中间节点关键字的比较结果确定下一步查找哪一个子表,这样递归进行,直到查找到或查找结束发现表中没有这样的节点;

复杂度分析:时间复杂度为O(log2^n),远远好于顺序查找的O(n),是一种效率较高的查找方法(二分查找的优点);

二分查找的缺点:虽然二分查找的效率高,但是要将表按关键字排序,而排序本身是一种很费时的运算;

注:折半查找的前提条件是需要有序表顺序存储,对于静态查找表,一次排序后不再变化,折半查找能够获得不错的效率;但是对于需要频繁执行插入或删除操作的数据集来说,维护有序的排序会带来不小的工作量,那就不建议使用。
对那些查找少而又经常需要改动的线性表,可采用链表作存储结构,进行顺序查找,链表上无法实现二分查找。

示例代码:
public class Test {

    public static void main(String[] args) {
        
        int[] arr = {1, 2, 3, 6, 8, 9};
        System.out.println(binary_Search(arr, 8));
    }
    public static int binary_Search(int[] arr, int num) {
        int low = 0;
        int high = arr.length -1;
        int mid;
        while(low < high) {
            mid = (high + low) / 2;
            if(arr[mid] < num) {
                low = mid + 1;
            } else if(arr[mid] > num) {
                high = mid - 1;
            } else {
                return mid;
            }
        }
        return -1;
    }
}

二分查找

标签:中间   折半查找   sea   数据集   线性表   复杂度   获得   二分查找   算法   

原文地址:https://www.cnblogs.com/yuanfei1110111/p/10204385.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!