• 前端常用算法


    十大算法:https://blog.csdn.net/weixin_41317985/article/details/79461929

    排序问题:

    1.1冒泡排序
    冒泡排序算法就是依次比较大小,小的的大的进行位置上的交换。

    var example=[8,95,34,21,53,12];
     function sortarr(arr){
      for(i=0;i<arr.length-1;i++){
       for(j=0;j<arr.length-1-i;j++){
        if(arr[j]>arr[j+1]){
         var temp=arr[j];
         arr[j]=arr[j+1];
         arr[j+1]=temp;
        }
       }
      }
      return arr;
     }
     sortarr(example);
     console.log(example);

    1.2快速排序

    /快速排序
    //1.这种方法比较简单,2019/8/5新增
    
    var example=[1,4,3,8,9,6,2]
            
    function quickSort(arr){
        if(arr.length<=1){
            return arr;
        }
        var left=[],right=[],current=arr.splice(0,1);
        for(let i=0;i<arr.length;i++){
            if(arr[i]<current){
                left.push(arr[i])
            }else{
                right.push(arr[i])
            }
        }
        return quickSort(left).concat(current,quickSort(right));
    }
    console.log(quickSort(example)); //[1, 2, 3, 4, 6, 8, 9]
    
    
    //2.
    function quickSort(arr,l,r){
        if(l < r){
            var i = l, j = r, x = arr[i];
            while(i<j){
                while(i<j && arr[j]>x)
                    j--;
                
                if(i<j)
                    //这里用i++,被换过来的必然比x小,赋值后直接让i自加,不用再比较,可以提高效率
                    arr[i++] = arr[j];
                
                while(i<j && arr[i]<x)
                    i++;
                
                if(i<j)
                    //这里用j--,被换过来的必然比x大,赋值后直接让j自减,不用再比较,可以提高效率
                    arr[j--] = arr[i];
            }
            arr[i] = x;
            
            quickSort(arr, l, i-1);
            quickSort(arr, i+1, r);
        }
    }

    1.3二路归并

    将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序

    function marge(left,right){
        var result=[];
        il=0;
        ir=0;
        while(il<left.length && ir<right.length){
            if(left[il]<right[ir]){
                result.push(left[il++]);
            }else{
                result.push(right[ir++]);
            }
        }
        while(left[il]){
            result.push(left[il++]);
        }
        while(right[ir]){
            result.push(right[ir++]);
        }
        return result;
    }
    2字符串操作
    2.1.翻转字符串
    
    //方法1:反向遍历字符串
    function reverseString(str){
        var tmp = '';
        for(var i=str.length-1;i>=0;i--)
            tmp += str[i];
        return tmp
    }
    //方法2:转化成array操作
    function reverseString2(str){
        var arr = str.split("");
        var i = 0,j = arr.length-1;
        while(i<j){
            tmp = arr[i];
            arr[i] = arr[j];
            arr[j] = tmp;
            i++;
            j--;
        }
        return arr.join("");
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    2.2生成指定长度的随机字符串
    
    function randomString(n){
        var str = 'abcdefghijklmnopqrstuvwxyz0123456789';
        var tmp = '';
        for(var i=0;i<n;i++)
            tmp += str.charAt(Math.round(Math.random()*str.length));
        return tmp;
    }
    1
    2
    3
    4
    5
    6
    7
    2.3.统计字符串中出现次数最多的字母
    详细方法可看这篇文章
    https://blog.csdn.net/weixin_42567389/article/details/88124777
    
    
    var str = "nininihaoa";
    var o = {};
    for (var i = 0, length = str.length; i < length; i++) {
    var char = str.charAt(i);
    if (o[char]) {
    o[char]++; //次数加1
    } else {
    o[char] = 1; //若第一次出现,次数记为1
    }}
    console.log(o); //输出的是完整的对象,记录着每一个字符及其出现的次数//遍历对象,找到出现次数最多的字符的次数
    var max = 0;
    for (var key in o) {
    if (max < o[key]) {
    max = o[key]; //max始终储存次数最大的那个
    }}
    for (var key in o) {
    if (o[key] == max) {
    //console.log(key);
    console.log("最多的字符是" + key);
    console.log("出现的次数是" + max);
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    2.4. 判断回文字符串
    
    function palindrome(str){
        // W匹配任何非单词字符。等价于“[^A-Za-z0-9_]”。
        var re = /[W_]/g;
        // 将字符串变成小写字符,并干掉除字母数字外的字符
        var lowRegStr = str.toLowerCase().replace(re,'');
        // 如果字符串lowRegStr的length长度为0时,字符串即是palindrome
        if(lowRegStr.length===0)
            return true;
        // 如果字符串的第一个和最后一个字符不相同,那么字符串就不是palindrome
        if(lowRegStr[0]!=lowRegStr[lowRegStr.length-1])
            return false;
        //递归
        return palindrome(lowRegStr.slice(1,lowRegStr.length-1));
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    3数组操作
    3.1 数组去重
    
    //利用Object中的key的唯一性,利用key来进行筛选
    function unique(arr){
        var obj = {}
        var data = []
        for(var i in arr){
            if(!obj[arr[i]]){
                obj[arr[i]] = true;
                data.push(arr[i]);
            }
        }
        return data;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    3.1.2 数组查重
    
    
    var ret= function(arr){
        var res=[arr[0]];
        var ch=[];
        for(var j=1;j<arr.length;j++){
            var repeat= false;
            for(var i=0;i<res.length;i++){
               if(arr[j]==res[i]){
                   //alert("重复的元素为:"+arr[j])
                   ch.push(arr[j]);
                   repeat=true;
                   break;
               }
            }
            if(!repeat){
               res.push(arr[j]);
            }
        }
        return ch;
    }
    var a=[1,3,4,3,5,'aa','bb','aa'];
    document.write(ret(a));  //3,aa
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    3.2 Number数组中最大差值
    
    function getMaxProfit(arr){
        var min = arr[0], max = arr[0];
        for(var i=0;i<arr.length;i++){
            if(arr[i]<min)
                min = arr[i];
            if(arr[i]>max)
                max = arr[i];
        }
        return max - min;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    4.阶乘
    
    //1. 非递归实现
    function factorialize(num) {
        var result = 1;
        if(num < 0) return -1;
        if(num == 0 || num == 1) return 1;
        while(num>1)
            result *= num--;
        return result;
    }
    //2. 递归实现
    function factorialize(num) {
        var result = 1;
        if(num < 0) return -1;
        if(num == 0 || num == 1) return 1;
        if(num > 1){
            return num*factorialize(num-1);
        }
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    5.生成斐波那契数列
    斐波拉契:又称黄金分割数列,值得是一个数列:0、1、2、3、5、8、13、21、34…,在数学上,斐波拉契数列主要考察递归的调用。
    
    //强行递归实现
    function getfib(n){
        if(n == 0)
            return 0;
        if(n == 1)
            return 1;
        if(n > 1){
            return getfib(n-1) + getfib(n-2);
        }
    }
    function fibo(len){
        var fibo = [];
        for(var i=0;i<len;i++)
            fibo.push(getfib(i));
        return fibo;
    }
    //方法2.非递归实现
    
    function getFibonacci(n) {
        var fibarr = [];
        var i = 0;
        while(i < n) {
            if(i <= 1) {
                fibarr.push(i);
            } else {
                fibarr.push(fibarr[i - 1] + fibarr[i - 2])
            }
            i++;
        }
        return fibarr;
    }
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    6.二分查找
    二分查找:是在有序数组中用的比较频繁的一种算法,优点是比较次数少,查找速度快、平均性能好;缺点是要求待查表为有序,且插入删除困难
    
    // 非递归实现
    function binary_search(arr, key) {
        var low = 0,
            high = arr.length - 1;
        while(low <= high){
            var mid = parseInt((high + low) / 2);
            if(key == arr[mid]){
                return  mid;
            }else if(key > arr[mid]){
                low = mid + 1;
            }else if(key < arr[mid]){
                high = mid -1;
            }
        }
        return -1;
    };
    //递归实现
    function binary_search2(arr, low, high, key) {
        if(low > high)
            return -1;
        var mid = parseInt((low + high)/2);
        if(key == arr[mid])
            return mid;
        else if(key > arr[mid])
            return binary_search2(arr, mid+1, high, key);
        else if(key < arr[mid])
            return binary_search2(arr, low, mid-1, key);
    }
  • 相关阅读:
    中国骨干网节点
    Linux命令整理
    centos6.5安装mysql
    mysql插入中文乱码问题
    Intellij Idea使用及配置
    IntelliJ IDEA像Eclipse一样打开多个项目
    IntelliJ IDEA14如何配置tomcat
    转:IntelliJ IDEA 2016.1.3注册破解激活
    IntelliJ Idea 快捷键
    CXF生成调用webservice的客户端
  • 原文地址:https://www.cnblogs.com/mary-123/p/12273252.html
Copyright © 2020-2023  润新知