JS算法

一、冒泡排序(Bubble Sort)

说明

1、比较相邻的元素。如果第一个比第二个大,就交换他们两个

2、对每一个对相邻元素作同样的工作,从开始第一对到结尾最后一对。

3、针对所有元素重复以上的步骤,除了最后一个。

代码实现思路

1、比较轮次为 所有数字总数减一次(每轮次实现将最大数交换到最后即结束)

2、每轮比较次数依次递减(已确定为最大值者无需再比较)

3、效率优化如果某一轮比较结束没有进行交换,即证明冒泡顺序已经对位无需再执行下轮比较

function bubbleSort(ary){
          //设置换位 标识
           var flag = false;
        //对比轮次 数组总数减1
        for(var i = 0;i<ary.length-1;i++){
//每轮 对比次数减少1次
for(var j =0;j<ary.length-1-i;j++){
如果 前一位比后一位大就换位
if(ary[j]>ary[j+1]){ ary[j] = ary[j]+ary[j+1]; ary[j+1] = ary[j]-ary[j+1]; ary[j] = ary[j]-ary[j+1];
//如果有换位 做标记 flag
= true; } }
//轮次结束 如果有换位
if(flag ){
//重置换位标识 flag
= false;
//如果没有换位 说明 数组排序已完成 终止对比 }
else{ break; } } return ary; } var ary = [10,9,2,4,3,2,11,22,33,12,15]; console.log(ary); var res = bubbleSort(ary); console.log(res);

 二、快速排序


说明

将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。  function quickSort(ary) {           //如果数组长度小于1不进行排序直接返回该数组            if(ary.length<1){

function quickSort(ary) {
// 找到基准点的索引
if(ary.length<=1){
return ary ;
}
var pointIndex = Math.floor(ary.length/2);
// 通过基准点的索引在原来的数组中,删除这一项,并把基准点这一项的值获取到
var pointValue = ary.splice(pointIndex,1)[0];
var left=[];
var right=[];
for(var i=0;i<ary.length;i++) {
var cur = ary[i];
cur < pointValue ? left.push(cur) : right.push(cur);
}
//重新把 左中右 组合到一起
return quickSort(left).concat([pointValue],quickSort(right));

}
var ary = [12,13,23,14,20,26,34,13,16];
var res = quickSort(ary);
console.log(res);

 三、插入排序

说明

讲一组数据  按顺序插入到一个新数组中 按照从大到小排序

<script type="text/javascript">
       function insertSort(ary){
           var newArray = [];
           newArray.push(ary[0]);
           for(var i = 1;i<ary.length;i++){
               var cur = ary[i];
               for(var j=newArray.length-1;j>=0 ;){
                 if(cur <newArray[j]){
                     j--;
                     if(j === -1){
                         newArray.unshift(cur);
                     }
                 }else{
                     newArray.splice(j+1,0,cur);
                     j=-1;
                 }
               }
           }
           return newArray;
       }
       var ary =[1,2,3,5,23,34,54,65,34,12,11,15];
       console.log(ary);
       var res = insertSort(ary);
       console.log(res);

   </script>

 四、数组去重

  function unique(ary){
          var obj ={};
            for(var i = 0;i<ary.length;i++){
                var cur = ary[i];
                if(obj[cur]==cur){
                   ary.splice(i,1,ary[ary.length-1]);
                    ary.length--;
                    i--;
                    continue;
                }
                obj[cur]=cur;
            }
            return ary;
        }
    var ary =[1,1,1,2,3,3,3,3,4,4,4,5,6,6,7,7,7,7,];
       console.log(ary);
        var res = unique(ary)
        console.log(res);

 四.递归(100以内被3和5同时整除的数累加)

 function rec(sum,num){
           if(num <1){
               return sum;
           }
         if(num%3==0&&num%5==0){
             sum+=num;
             return rec(sum,num-1);
         }else{
             return rec(sum,num-1);
         }
       }
       var res  = rec(0,100);
       console.log(res);

 

posted @ 2017-03-18 12:27  且听风吟V  阅读(337)  评论(0编辑  收藏  举报