乐趣区

JS算法

相关借鉴文章:https://juejin.im/entry/57d90…
<!– 快速排序 –>function quickSort(arr){
// 如果数组个数为 1 个,则直接返回数组本身
if(arr.length<=1){
return arr
}

// 获取数组中间值的索引
var quickIndex = Math.floor(arr.length/2);
//quick 取到数组中间那个值,[0] 取值,不加 [0],则打印出来是一个数组,例如 [9],加 [0],则打印出来是一个值,例如 9;
var quick = arr.splice(quickIndex,1)[0];
// 定义两个空数组,大于中间值放到 right,小于中间值放到 left
var left = [];
var right = [];

for(var i=0,len=arr.length;i<len;i++){
if(arr[i]<quick){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat(quick,quickSort(right));
}var arr = [3,5,7,2,11,77]document.write(quickSort(arr));//2,3,5,7,11,77
<!– 数组去重 –>var arr1 = [1,2,2,3,3,4,5,6,6],
arr2 = [];
for(var i = 0;i < arr1.length;i++){
if(arr2.indexOf(arr1[i]) < 0){
arr2.push(arr1[i])
}
}document.write(arr2);//1,2,3,4,5,6
冒泡排序原理:让数组中的当前项和后一项进行比较,如果当前项大于后一项,我们让两者交换位置(小 -> 大)
每一轮从前到后两两比较,虽然不一定实现最后的排序效果,但是可以把当前最大的放在末尾
具体比较的轮数:ary.length-1 数组有多长,我们只需要把总长度 - 1 个数分别放在末尾,即可实现最后的排序
第一轮比较 5 次:一共六个,不需要和自己比较
第二轮比较 4 次:一共六个,不用和自己比,也不用和第一轮放在末尾的那个最大值比
第三轮比较 3 次:
…<br/>
每一轮比较的次数:ary.length – 1(不用和自己比)- 当前已经执行的论数(执行一轮向末尾放一个最大值,这些值不需要在比较)
a=12 b=13 a 和 b 交换值
第一种方法:
c=a
a=b
b=c
第二种方法:a=a+b;25
b=a-b;12
a=a-b;13

function bubble(ary){for(var i=0;i<ary.length-1;i++){for(var j=0;j<ary.length-1-i;j++){if(ary[j]>ary[j+1]){var temp = ary[j];ary[j] = ary[j+1];ary[j+1] = temp;}}}return ary;}var ary = [5,3,1,57,89,9];console.log(bubble(ary));
如果是从大到小排序,直接 return ary.reverse();
<!–reduce 实现数组求和 –>Array.prototype.sum = function(){
var cur = 0;
return this.reduce((prev,next)=>{
return cur = prev + next;
})
return cur;
}var ary = [1,2,3,4];console.log(ary.sum());//10
function sumFun(cur){
var sumTot = 0;
return cur.reduce((prev,next) => {
return sumTot = prev + next;
},0);
return sumTot;
}var num = [1,2,3]sumFun(num);//6

退出移动版