zoukankan      html  css  js  c++  java
  • 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);
  • 相关阅读:
    日记1
    JDK、JRE、JVM三者间的关系
    线性表之二,SLINKLIST(单链表)类,模板类及C链表(增删改查,广义表
    线性表之一,SEQLIST(顺序表)类及其父类LIST,模板类及C结构体,包装顺序表
    PTA(中国人民解放军陆军工程大学数据结构,C语言)
    冒泡排序
    选择排序、堆排序
    冒泡排序,快速排序
    springMVC定时器
    MD5加密
  • 原文地址:https://www.cnblogs.com/zzzzzzzsy/p/6573007.html
Copyright © 2011-2022 走看看