算法

作者: Shiki_思清 | 来源:发表于2021-11-26 00:54 被阅读0次

    冒泡算法排序

    function bubbleSort(arr) {
          for (var i = 0; i < arr.length; i++) {
            for (var j = 0; j < arr.length; j++) {
              if (arr[j] > arr[j + 1]) {
                var temp = arr[j]
                arr[j] = arr[j + 1]
                arr[j + 1] = temp
              }
            }
          }
        }
    

    快速排序

        /*
        快速排序是对冒泡排序的一种改进,第一趟排序时将数据分成两部分,一部分比另一部分的所有数据都要小。
        然后递归调用,在两边都实行快速排序。  
        */
        
        function quickSort(arr) {
          if (arr.length <= 1) {
            return arr
          }
          var middle = Math.floor(arr.length / 2)
          var middleData = arr.splice(middle, 1)[0]
    
          var left = []
          var right = []
          
          for (var i = 0; i < arr.length; i++) {
            if (arr[i] < middleData) {
              left.push(arr[i])
            } else {
              right.push(arr[i])
            }
          }
    
          return quickSort(left).concat([middleData], quickSort(right))
        }
    
        var Arr = [3, 5, 74, 64, 64, 3, 1, 8, 3, 49, 16, 161, 9, 4]
        console.log(Arr, "before");
        var newArr = quickSort(Arr)
        console.log(newArr, "after");
    
    

    插入排序

        function insertSort(arr) {
          // 默认第一个排好序了
          for (var i = 1; i < arr.length; i++) {
            // 如果后面的小于前面的直接把后面的插到前边正确的位置
            if (arr[i] < arr[i - 1]) {
              var el = arr[i]
              arr[i] = arr[i - 1]
              var j = i - 1
              while (j >= 0 && arr[j] > el) {
                arr[j+1] = arr[j]
                j--
              }
              arr[j+1] = el
            }
          }
        }
    
        var Arr = [3, 5, 74, 64, 64, 3, 1, 8, 3, 49, 16, 161, 9, 4]
        console.log(Arr, "before");
        insertSort(Arr)
        console.log(Arr, "after");
    

    正则表达式,千分位分隔符

    function thousand(num) {
    
          return (num+"").replace(/\d(?=(\d{3})+$)/g, "$&,")
        }
        console.log(thousand(123456789));
    

    斐波那契数列

        // num1前一项
        // num2当前项
        function fb(n, num1 = 1, num2 = 1) {
          if(n == 0) return 0
          if (n <= 2) {
            return num2
          } else {
            return fb(n - 1, num2, num1 + num2)
          }
        }
    

    数组去重的方式

        var arr = [1, 2, 1, 1, 1, 2, 3, 3, 3, 2]
    
        // 最low1
        let newArr2 = []
        for (let i = 0; i < arr.length; i++) {
          if (!newArr2.includes(arr[i])) {
            newArr2.push(arr[i])
          }
        }
        console.log(newArr2);
        // 最low2
        let arr2 = [1, 2, 1, 1, 1, 2, 3, 3, 3, 2]
        for (let i = 0; i < arr2.length; i++) {
          var item = arr2[i]
          for (let j = i + 1; j < arr2.length; j++) {
            var compare = arr2[j];
            if (compare === item) {
              arr2.splice(j, 1)
              j--
            }
          }
        }
        console.log(arr2);
    
    
        // 基于对象去重
        let arr3 = [1, 2, 1, 1, 1, 2, 3, 3, 3, 2]
        let obj = {}
        for (let i = 0; i < arr3.length; i++) {
    
          let item = arr3[i]
          if (obj[item]) {
            arr3[i] = arr3[arr3.length - 1]
            arr3.length--
            i--
            continue;
          }
          obj[item] = item
    
        }
        console.log(arr3);
        console.log(obj);
    
        // 利用Set
        let newArr1 = new Set(arr)
        console.log([...newArr1]);
    
    
        let arr4 = [1, 2, 1, 1, 1, 2, 3, 3, 3, 2]
    
        //利用reduce
        newArr4 = arr4.reduce((prev, curr) => prev.includes(curr)? prev : [...prev,curr],[])
        console.log(newArr4);
        console.log(document);
    
    

    相关文章

      网友评论

          本文标题:算法

          本文链接:https://www.haomeiwen.com/subject/opktxrtx.html