二分查找

二分查找:

前提:

数组并且有序

描述:

优先与数组的中间元素比较,如果等于中间值,则直接返回元素的牵引值
如果查找值小于中间值,则在左边的元素重复步骤①
如果查找值大于中间值,则在邮编的元素重复步骤①
否则,查找失败,返回-1

//二分查找:递归实现
//数组有序
var binarySearch =  function(target, arr, start=0, end=arr.length-1){
    var start = start;
    var end = end;
    if( start > end){
         return -1
    }
    var mid = parseInt(start+(end-start)/2);

    if(target == arr[mid] ){
        return mid;
    }else if (target < arr[mid]){
        return binarySearch(target, arr, start, mid -1)
    }else {
        return binarySearch(target, arr, mid + 1, end)
    }

}

在数组有序的情况下,自然可以使用以上方法,但是在数组无序的情况下呢?马上就想到先试用快排分组,完成分组后再进行二分查找 show code

//二分查找
//无序数组,先快排,后二分
function binarySearch(target,arr) {
    while (arr.length>0){
        //使用快速排序。以mid为中心划分大小,左边小,右边大。
        var left    = [];
        var right   = [];
        //选择第一个元素作为基准元素(基准元素可以为任意一个元素)
        var pivot   = arr[0];
        //由于取了第一个元素,所以从第二个元素开始循环
        for(var i=1;i<arr.length;i++){
            var item = arr[i];
            //大于基准的放右边,小于基准的放左边
            item>pivot ? right.push(item) : left.push(item);
        }

        //得到经过排序的新数组
        if(target==pivot){
            return true;
        }else if(target>pivot){
            arr     = right;
        }else{
            arr     = left;
        }
    }
    return false;
}

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

相关阅读更多精彩内容

  • 本文的整理基于:http://blog.csdn.net/qq_23217629/article/details/...
    阿阿阿阿毛阅读 1,704评论 0 3
  • 数据结构与算法--查找之顺序查找和二分查找 符号表的目的是将一个键和一个值关联起来,可以将一对键值对插入到符号表中...
    sunhaiyu阅读 1,899评论 1 2
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,326评论 19 139
  • 金秋,那最後的篝火是冬日温暖你的暖陽。 金秋,那潤甜又可口的果醬。 金秋,那遍地的柔風帶著 一抹夏的清爽...
    迷你小诗人阅读 331评论 0 1
  • 明天就可以回家过年了。 盼来盼去,终于盼到了这一天。 今晚收拾东西突然想写一个总结,好像每年年末或者过年前总有许多...
    琳芳阅读 621评论 10 5

友情链接更多精彩内容