<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<script>
//冒泡算法,这里用两个循环实现
function bubbleSort(arr){
var val;
for(var a = 0;a<arr.length;a++){
//b=1说明:因为自身是不用比较的,那就从1开始;arr.length-a说明:是因为循环一轮之后,
// 就有一个数被排序好到最后,-a呢,最后这个就不用比较了,由此类推
for(var b = 1;b<arr.length-a;b++){
if(arr[a]>arr[a+b]){
val = arr[a];
arr[a] = arr[a+b];
arr[a+b] = val;
}
}
}
return arr;
}
console.log('冒泡排序:'+bubbleSort([2,1,3,6,5,4,10]));
//快排,核心思想:把数组分为两组,取中间一个数,小于或大于这个数的放左边数组,否则放右边,然后不断的递归重复的操作,到了递归的尾部,
// 就会开始把排好的数组组装好再归回来,这要求对递归有一定的了解,不然理解不了
function quickSort(arr){
if(arr.length<2){
return arr;
}
var left = [],right = [],conter,conterIndex;
conterIndex = Math.floor(arr.length/2);
conter = arr.splice(conterIndex,1)[0];
for(var a = 0;a<arr.length;a++){
if(arr[a]<=conter){
left.push(arr[a]);
}else{
right.push(arr[a]);
}
}
return quickSort(left).concat([conter],quickSort(right));
}
console.log('快排:'+quickSort([4,2,3,1,5]));
//用二分法查找指定的数
function check(arr,val){
var low = 0,len = arr.length-1,index = 0;
while(low<=len){
index = Math.floor((len+low)/2);
if(arr[index]==val){
return index;
}
//若值大于目标值,则当前索引-1往后的索引值全不要,就是说当前索引值和后面的肯定是大于目标值的,故无需查找
if(arr[index]>val){
len = index-1;
}else{
若值小于目标值,则当前索引值+1往前的索引值全不要,就是说当前索引值和前面的肯定是小于目标值的,故无需查找
low = index+1;
}
}
return -1;
}
console.log('二分查找:'+check([1,2,3,4,5,6,7,8,9],2));
//去重
function filter(arr){
var j = {},res = [];
for(var a = 0;a<arr.length;a++){
if(!j[arr[a]]){
//json里面没有就存1,很简单不说了
j[arr[a]] = 1;
res.push(arr[a]);
}
}
return res;
}
console.log("去重:"+filter([3,4,5,4,3,2,4]));
function copy(obj){
var buf;
if(obj instanceof Array){
buf = [],i = obj.length;
while(i--){
//把数组递归出去,再返回它的元素
buf[i] = copy(obj[i]);
}
return buf;
}else if(obj instanceof Object){
buf = {};
for(var k in obj){
//把数组递归出去,再返回它的元素
buf[k] = copy(obj[k]);
}
return buf;
}else{
//其他数据原样返回
return obj;
}
}
console.log("复制:"+copy([1,2,3,4,5])[1]);
//给字符串加空格返回
function addChar(str){
var res = '';
for(var a = 0;a<str.length;a++){
res+=str.charAt(a)+' ';
}
//返回之前去掉最后一个空格
return res.substring(0,res.length-1);
}
console.log('给字符增加空格:'+addChar('abcdef'));
</script>
</body>
</html>
js面试常考算法
最新推荐文章于 2022-12-11 21:59:21 发布