数组排序
1.冒泡排序
var ary=[0,1000,800,12,23,22,24,45,5,78,15,12,12,23,1245,56]; function bubbleSort(ary){ var temp=null; // 做一个标记 var flag=false; //1.循环ary.length-1次,在循环中每次拿第一项与后一项比较,大于后一项与其交换位置,(每轮可以循环出一个最大值放在最后); // 2.做一个标记flag,标记是否循环过; for(var i=0;i<ary.length-1;i++){ for(var j=0;j<ary.length-i-1;j++){ if (ary[j]>ary[j+1]){ temp=ary[j]; ary[j]=ary[j+1]; ary[j+1]=temp; flag=true; } } // 判断上一轮是否修改了,如果修改了,那把标记改为false,没有修改直接跳出大循环 if (flag){ flag=false; }else{ break } } return ary } var result=bubbleSort(ary); console.log(result);
2.快速排序
var ary=[0,1000,800,12,23,22,24,45,33,78,15,12,12,23,1245,56]; function quickSort(ary){ // 1.判断需要排序的数组个数必须大于1个 if (ary.length<=1){ return ary } // 2.寻找中心的index,及对应的value,把中间值截取出来,注意返回的是数组 var pointIndex=Math.floor(ary.length/2); var pointValue=ary.splice(pointIndex,1)[0]; var left=[]; var right=[]; // 3.循环剩下的值,与中间值做对比,分类 for(var i=0;i<ary.length;i++){ if (ary[i]>pointValue){ right.push(ary[i]) }else{ left.push(ary[i]) } } // 4.递归,对左边,右边数组重复操作,别忘了加中间截掉的值 return quickSort(left).concat([pointValue],quickSort(right)) } var result=quickSort(ary) console.log(result)
3.插入排序
var ary=[12,23,12,23,45,48,165,48,465,4,89,165]; function insetSort(ary){ // 1.创建新数组 var newAry=[]; // 2.去一个值放在新数组中 newAry.push(ary[0]); for(var i=1;i<ary.length;i++){ var cur=ary[i]; // 3.新数组从后向前循环 for(var j=newAry.length-1;j>=0;){ // 4.新数组中的值大于比较值时 if (newAry[j]>cur){ // j--;当j==-1时,证明是最小的了,直接添加到开始 j-- if (j==-1){ newAry.unshift(cur) } }else{ // 5.否则就是很大喽,那就直接添加到J项后面,J+1项前面 newAry.splice(j+1,0,cur); j=-1 } } } return newAry } console.log(insetSort(ary))