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

    原文作者:阳光Angel
    原文地址: https://segmentfault.com/a/1190000018581844
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞