快速排序和二分查找

一、二分查找和普通查找的优缺点

普通查找:原理简单,不需要数组有序;当元素个数很大时候,效率较低;

二分查找,需要数组有序排列,但是查找效率高;

 

二、二分查找实现

//查找指定元素在循序数组中的索引

function binary_search(arr,key){
  var low=0,
  high=arr.length-1;
  while(low<=high){
  	 //重新计算中间项索引位置
     var mid=parseInt((high+low)/2);
     if(key==arr[mid]){
        return mid;
     }else if(key>arr[mid]){
        low=mid+1;
     }else if(key<arr[mid]){
        high=mid-1;
     }else{
      return -1;
     }
  }
};
var arr=[1,2,3,4,5,6,7,8,9,10,11,12,15,29];
console.log(binary_search(arr,10));//9

  

  

三、快速排序

function quickSort(arr){
      if(arr.length <= 1){
        return arr;
      }

      var baseIndex = Math.floor(arr.length/2);
      var baseVal = arr.splice(baseIndex,1)[0];//基准元素
      var left = [];
      var right = [];
      for(var i=0,len=arr.length; i<len; i++){
          if(arr[i] <baseVal){
            left.push(arr[i]);
          }else{
            right.push(arr[i]);
          }
      }

      return quickSort(left).concat([baseVal],quickSort(right));
    }
    
    var arr2 = [1,35,1,45,2,4,65,3,3,4,5,6,6,6];
    console.log(quickSort(arr2));

  

 

posted @ 2018-03-06 14:12  leaf+  阅读(1762)  评论(0编辑  收藏  举报