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]);
}
}
浙公网安备 33010602011771号