原理:
第一步:选择中间元素mid做为基准。单独拿出来放到新数组,原来数组中去掉这个元素。第一步:选择中间元素mid做为基准。单独拿出来放到新数组,原来数组中去掉这个元素。
第二步:按照数组的顺序,将每一个元素和这个mid比较,全部比它小的都放到左边新空数组left中,全部比它大的放到右边right中。
第三步:对左右两个数组,分别作第一步和第二步的比较,直到只剩下一个元素为止。最后作数组拼接。数组
代码实现以下:ui
var ary=[6,3,9,5,23,66,8]; function quickSort(ary) { if(ary.length<=1){ return ary; //这个条件必定要放在前面 } var midIndex=Math.floor(ary.length/2); var midItem=ary.splice(midIndex,1)[0];//splice获取的是删除的那项组成的新数组 var left=[]; var right=[]; for(var i=0;i<ary.length;i++){ var cur=ary[i]; if(cur<=midItem){ left.push(cur); }else{ right.push(cur); } } return quickSort(left).concat(midItem,quickSort(right)); }
原理: 冒泡排序的基本思想是,对相邻的元素进行两两比较,顺序相反则进行交换,这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到彻底有序。code
<script> var ary=[6,3,9,5,23,66,8]; function bubbleSort(ary) { var flag=true; 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; flag=false; } } if(flag){ return ary; } } return ary; } console.log(bubbleSort(ary)); </script>
原理:将一组数据分红两组,分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增长,待插入组减小。直到待插入组元素个数为0。注意,插入过程当中涉及到了元素的移动。排序
<script> function chaRuSort(ary) { var newAry=[]; newAry.push(ary.shift());//newAry.push(arr[0]); for(var i=0;i<ary.length;i++){ var cur=ary[i]; for(var j=0;j<newAry.length;j++){ if(cur<newAry[j]){ newAry.splice(j,0,cur); break; }else{ if(j===newAry.length-1){ newAry.push(cur); break; } } } } return newAry; } var ary=[2,6,9,23,10,22,8]; var res=chaRuSort(ary); console.log(res); </script>