程序算法入门基础分享

算法高深莫测,还有很多值得去学习的,下面是纯属是我自己兴趣研究的结合网上的整理的算法程序。

// 冒泡排序=========================================
      var arr = [3, 6, 8, 7, 2, 1, 5];
      for (var i = 0; i <= arr.length-1; ++i) {
          console.log('第'+i+'次结果---->' + arr)
        for (var j = 0; j <= arr.length-i-1; ++j) {
          console.log('过程---->' + arr)
          if (arr[j] > arr[j+1]) {
            var midNum = arr[j+1];
            arr[j+1] = arr[j];
            arr[j] = midNum;
          }
        }
      }
      console.log('最终结果---->' + arr)

// 递归算法==========================================
      /* function firstA(n){
        if(n == 1){
          return 1;
        }
        else{
          return firstA(n - 1)*n;
        }
      }
      console.log(firstA(3)) */

 // 递归算法实战使用====================================
      var data = [{
          id: '1',
          name: 'a',
          pid: '0'
        },
        {
          id: '2',
          name: 'b',
          pid: '0'
        },
        {
          id: '3',
          name: 'c',
          pid: '0'
        },
        {
          id: '4',
          name: 'd',
          pid: '1'
        },
        {
          id: '5',
          name: 'e',
          pid: '2'
        },
        {
          id: '6',
          name: 'f',
          pid: '3'
        },
        {
          id: '7',
          name: 'g',
          pid: '6'
        },
        {
          id: '8',
          name: 'g',
          pid: '2'
        },
        {
          id: '9',
          name: 'g',
          pid: '0'
        },
        {
          id: '10',
          name: 'g',
          pid: '1'
        },
        {
          id: '11',
          name: 'g',
          pid: '3'
        },
        {
          id: '12',
          name: 'g',
          pid: '11'
        },
        {
          id: '13',
          name: 'g',
          pid: '2'
        },
      ];

      var addArr = [];
      for (var i = 0; i < data.length; ++i) {
        if (data[i].pid == '0') {
          var obj = {
            id: data[i].id,
            name: data[i].name
          }
          addArr.push(obj);
        }
      }

      function option2treeDG(data, addArr) {
        for (let j = 0; j < addArr.length; j++) {
          let childrenArr = [];
          let addArrIndex = addArr[j];
          let Id = addArrIndex.id;
          for (let i = 0; i < data.length; i++) {
            let crrIndex = data[i];
            let parentId = crrIndex.pid;
            if (parentId == Id) {
              //判断是否为子节点
              let objTemp = {
                id: crrIndex.id,
                name: crrIndex.name
              };
              childrenArr.push(objTemp);
            }
          }
          if (childrenArr.length > 0) {
            addArrIndex.children = childrenArr;
            //有儿子节点则递归
            option2treeDG(data, childrenArr);
          }
        }
      }
      option2treeDG(data, addArr)
//----------------------------------------------------------------------------

//自由组合实现========================================================
var data = ['白菜', '土豆', '萝卜', '冬瓜', '西红柿'];
      function getGroup(data, index = 0, group = []) {
        var need_apply = new Array();
        // 每一次提出data里面新的菜品
        need_apply.push(data[index]);
        // 组合
        for (var i = 0; i < group.length; ++i) {
          need_apply.push(group[i] + ',' + data[index]);
        }
        for(var j=0; j<need_apply.length; ++j){
          group.push(need_apply[j]);
        }
        // group.push.apply(group, need_apply);

        // 结束条件
        if (index + 1 >= data.length) {
          return group;
        } else {
          // 递归
          return getGroup(data, index + 1, group);
        }
      }
      console.log(getGroup(data));

 纯属个人对于算法的分享,有更好的可以一起讨论