js算法面试题

二分法查找,也称折半查找,是一种在有序数组中查找特定元素的位置的搜索算法。查找过程可以分为以下步骤:
(1)首先,从有序数组的中间的元素开始搜索,如果该元素正好是目标元素(即要查找的元素),则搜索过程结束,否则进行下一步。
(2)如果目标元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半区域查找,然后重复第一步的操作。
(3)如果某一步数组为空,则表示找不到目标元素。
参考代码:
<script>
function search(arr, key){
   var low=0,
   hight=arr.length-1;
   while(low<=hight){
   var mid=parseInt((low+hight)/2);
   if(key==arr[mid]){
   return mid
   }else if(key>arr[mid]){
    low=mid+1
   }else if(key<arr[mid]){
    hight=mid-1
   }else{
   return -1
  }
}
}
var arr = [11,21,31,44,55,62,75,85,97,105,151,273,445,876];
alert(search(arr,445));
</script>


 

快速排序"的思想很简单,整个排序过程只需要三步:
(1)在数据集之中,选择一个元素作为"基准"(pivot)。
(2)所有小于"基准"的元素,都移到"基准"的左边;所有大于"基准"的元素,都移到"基准"的右边。
(3)对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。
参考代码:
<script>
var quickSort=function(arr){
if(arr.length<=1){return arr};
var pivotIndex=Math.floor(arr.length/2);
var pivot=arr.splice(pivotIndex,1)[0];
var left=[];
var right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]<pivot){
left.push(arr[i])
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot],quickSort(right));
}
var arr=[1,32,54,651,320,221,54,326,87,94,125,232];
alert(quickSort(arr));


 

如何消除一个数组里面重复的元素?

// 方法一:
var arr1 =[1,2,2,2,3,3,3,4,5,6],
    arr2 = [];
for(var i = 0,len = arr1.length; i< len; i++){
    if(arr2.indexOf(arr1[i]) < 0){
        arr2.push(arr1[i]);
    }
}

 

深度拷贝任意数据类型
var cloneObj = function(obj){ var str, newobj = obj.constructor === Array ? [] : {};
if(typeof obj !== 'object'){ return; }
else if(window.JSON){
str = JSON.stringify(obj), //序列化对象
newobj = JSON.parse(str); //还原
} else {
for(var i in obj){
newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i];
}
}
return newobj;
};
posted @ 2017-06-05 15:09  jk007  阅读(81)  评论(0)    收藏  举报