基础算法

193 阅读2分钟

算法

数组中的俩个值交换

        //数组中的俩个值进行交换位置
        function swap(array, left, right) {
            let rightValue = array[right]
            array[right] = array[left]
            array[left] = rightValue
        }

颠倒顺序

        //通过split变成数组,利用reverse方法倒序,最后join
        function test(str){
            console.log(str.split("").reverse().join(""))
        }
        test("lukangfeng");

数组去重

        //通过键值对key,匹配是否有重复
        function test(str){
            var temp=[];
            var object={};
            for(let i=0;i<str.length;i++){
                if(!object[str[i]]) {
                    object[str[i]] = true;
                    temp.push(str[i]);
                }
            }
            return console.log(temp);
        }
        test([1,25,18,14,20,18,1,8,14,1,18]);

统计字符串出现最多的字母

        function test(str){
            var main=str.split("");
            var arr={};
            var max={"name":"name","num":0};
            for(let i=0;i<main.length;i++){
                if(arr[main[i]]){
                    arr[main[i]]=arr[main[i]]+1;
                    //判断是否最大,是就记录到max
                    if(max["num"]<arr[main[i]]){
                        max["name"]=main[i];
                        max["num"]=arr[main[i]];
                    }
                }else{
                    arr[main[i]]=1;
                }
            }
            return console.log(max);
        }
        test("woailukangfengtongjibagg");

冒泡排序

        function test(str){
            var arr=str;
            var temp;
            for(var i=0;i<arr.length-1;i++){
                for(var j=0;j<arr.length-1;j++){
                    if(arr[j]>arr[j+1]){
                        temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;
                    }
                    console.log(arr)
                }
            }
            //return console.log(arr)
        }

        test([12,19,11,2,46,7]);

快速排序

        function quickSort(arr) {

            if(arr.length<=1) {
                return arr;
            }
            let leftArr = [];
            let rightArr = [];
            let q = arr[0];
            for(let i = 1; i<arr.length; i++) {
                if(arr[i]>q) {
                    rightArr.push(arr[i]);
                }else{
                    leftArr.push(arr[i]);
                }
            }
            return [].concat(quickSort(leftArr),[q],quickSort(rightArr));
        }


        test([12,19,11,2,46,7]);

不借助临时变量,进行两个整数的交换

    function test(a,b){
        b=b-a;
        a=a+b;
        b=a-b;
        return console.log(a,b);
    }

    test(1,10);

插入排序

clipboard.png

        function insertion(array) {
          for (let i = 1; i < array.length; i++) {
            for (let j = i - 1; j >= 0 && array[j] > array[j + 1]; j--)
            //俩俩交换
              swap(array, j, j + 1);
          }
          return array;
        }

        //数组中的俩个值进行交换位置
        function swap(array, left, right) {
            let rightValue = array[right]
            array[right] = array[left]
            array[left] = rightValue
        }

选择排序

clipboards.png

            function selection(array) {
              for (let i = 0; i < array.length - 1; i++) {
                let minIndex = i;
                for (let j = i + 1; j < array.length; j++) {
                    //每一次得到最小的值,然后到前面
                  minIndex = array[j] < array[minIndex] ? j : minIndex;
                }
                //交换
                swap(array, i, minIndex);
              }
              return array;
            }

                //数组中的俩个值进行交换位置
                function swap(array, left, right) {
                    let rightValue = array[right]
                    array[right] = array[left]
                    array[left] = rightValue
                }

高阶算法 传送门