二分查找

二分查找:

    它的前提是线性表中的记录必须是有序,线性表必须采用顺序存储。

基本思想:

    在有序表中,取中间记录作为比较对象,若给定值与中间记录的关键字相等,则查找成功;若给定值小于中间记录的关键字,则在中间记录的左半区继续查找;若给定值大于中间记录的关键字,则在中间记录的右半区继续查找。不断重复上述过程,直到查找成功,或所有查找区域无记录,查找失败为止。

class BinarySearch {

    public static void main(String[] argv){

        int[] arr = {1,16,24,35,47,59,62,73,88,99};

        int key = 62; //待查找元素

        int index = search(arr,key);

        System.out.println(index);

    }

    /*二分查找*/

    public static int search(int[] arr,int key){

        int low,high,mid;

        //定义最低下标为记录首位

        low = 0;

        //定义最高下标为记录末位

        high = arr.length-1;

        while(low<=high){

              //折半

            mid = (low+high)/2;

            if(key>arr[mid]){

                //若查找值比中值小,最高值调整到中位下标小一位

                low = mid+1;

            }else if (key

                //若查找值比中值大,最小值调整到中位下标大一位

                high = mid-1;

            }else{

                //若相等则说明mid即为查找到的位置

                return mid;

            }

        }

        return 0;

    }

}

代码实现下载地址

二分查找相当于是把静态有序查找表分成两颗子树,即查找结果只需要找其中的一半数据记录即可,等于工作量少了一半,然后继续折半查找,效率当然是非常高了。

最好的情况:1

最坏的情况:log2(3)+1

最终二分查找算法的时间复杂度为O(logn)

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容