js数组冒泡排序、快速排序、插入排序
1、冒泡排序
//第一种 function bubblesort(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 items = ary[j]; ary[j] = ary[j+1]; ary[j+1] = items; } } } return ary; } var ary=[2,5,4,1,6,3]; console.log(bubblesort(ary)); //第二种 var bubbleSort=function(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ if(arr[i]>arr[j]){//如果前面的数据比后面的大就交换 var temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } return arr; } var arr=[2,5,4,1,6,3]; console.log(bubbleSort(arr));
2、快速排序
// 数组快速排序的原理 : 获取数组的中间项,然后对数组进行循环,判断数组每一项和这个中间项进行比较,比中间项小的放在左边数组,比中间项大的放进右边的数组;然后通过递归对左边数组右边数组进行同样的处理,最后把每一个数组和中间项拼接在一起; function quickSort(ary) { // 当数组长度为一时,不需要再递归 if(ary.length<=1){ return ary; } // 计算中间项的索引,偶数项取中间两项后面一项,奇数项取中间项 var index = Math.floor(ary.length/2); // splice : 返回值是一个数组,通姑索引获取中间项 var middle = ary.splice(index,1)[0]; var left = []; var right = []; for(var i=0;i<ary.length;i++){ var cur = ary[i]; if(cur<middle){ left.push(cur); }else{ right.push(cur); } } return quickSort(left).concat(middle,quickSort(right)); }
3、插入排序
function insertSort(ary){ var newAry= []; newAry.push(ary[0]); for(var i=1;i<ary.length;i++){ var cur = ary[i]; for(var j=newAry.length-1;j>=0;){ if(cur<newAry[j]){ j--; if(j===-1){ newAry.unshift(cur); } }else{ newAry.splice(j+1,0,cur); break; } } }; return newAry; }