一些简单的算法

冒泡排序,比如你有五个数  3 4 2 1 0

 

       其原理就是用没个数和 其他数进行比较 下面我们来书写每一轮的数值

       第一轮:

                  3 < 4 > 2       得出队列 2 4 3 1 0   

                  2 < 1  < 0      得出队列 1 4 3 2 0     得出队列   0 4 3 2 1

       第二轮 

                  4 > 3             得出队列 0 3 4 2 1  

                  3 > 2 > 1       得出队列 0 2 4 3 1     得出队列   0 1 4 3 2

       第三轮

                  4 > 3             得出队列 0 1 3 4 2

                  3 > 2             得出队列 0 1 2 4 3

      第四轮

                  4 > 3             得出队列 0 1 2 3 4

      实现代码

let arr = [3,4,2,1,0];
for(let i = 0;arr[i]!=undefined;i++){
    for(let j = i;arr[j]!=undefined;j++){
        if(arr[i] > arr[j]){
            let jh = arr[i];
            let arr[i] = arr[j];
            let arr[j] = jh;
        }
    }
}
console.log(arr);  //[0,1,2,3,4]

已上代码大大消耗了 cpu的性能

列入我们 有几十万个数  那电脑就可能要卡顿个几秒了

接下来我们聊聊 高性能的快速排序9 6 3 7 5 2 1 0 8 4做例子

首先找个基准  找谁为基准都可以 然后和当前所有数列进行对比

首先我们要先定义两个空数组

let arr = [9,6,3,7,5,2,1,0,8,4];
function Sort(arr){
    let left = [];
    let right = [];
}
Sort(arr);

 接下来我们冲数列中 找一个基准 并把他冲数组中移除

 这里说到的基准 其实就是 一个参照数

let arr = [9,6,3,7,5,2,1,0,8,4];
function Sort(arr){
    let left = [];
    let right = [];
    let standard = Math.floor(arr.splice(arr.length / 2,1)); //基准
}
Sort(arr);

  接下来遍历数列  将大于基准值的丢进 left  小于基准值的丢进 right

let arr = [9,6,3,7,5,2,1,0,8,4];
function Sort(arr){
    let left = [];
    let right = [];
    let standard = Math.floor(arr.splice(arr.length / 2,1)); //基准
    for(let i = 0;arr[i]!=undefined;i++){
        if(arr[i] > standard){
            right.push(arr[i]);
        }else{
            left.push(arr[i]);
        }
    }
}
Sort(arr);

  最后我们还需要递归该数列    既然说了是递归,就要加一个出口条件 否则会出现

  too much recursion

let arr = [9,6,3,7,5,2,1,0,8,4];
function Sort(arr){
    if(arr.length <= 0)return arr;    //出口
    let left = [];
    let right = [];
    let standard = Math.floor(arr.splice(arr.length / 2,1)); //基准
    for(let i = 0;arr[i]!=undefined;i++){
        if(arr[i] > standard){
            right.push(arr[i]);
        }else{
            left.push(arr[i]);
        }
    }
    return Sort(left).concat(standard,Sort(right));   //递归
}
Sort(arr);

  还有就是常用的斐波那契数列

  斐波那契数列就是前两个数 的合等于第三个数

  首先 先创建一个空数组

  生成指定长度斐波那契数

let arr = [];
function Fibonacci(index){
    
}
let item = Fibonacci(10);    //比如我们创建一个长度为10的斐波那契数列
console.log(item);

 首先判断如果前两个数 = undefined 那么插入值为1否则插入计算结果

let arr = [];
function Fibonacci(index){
    let value = (arr[arr.length - 1] + arr[arr.length - 2]);
    if(isNaN(value) == true){
        arr.push(1);
    }else{
        arr.push(value);
    }
    if(--index <= 0)return arr;//定义递归的出口
    return Fibonacci(index);
}
let item = Fibonacci(10);    //比如我们创建一个长度为10的斐波那契数列
console.log(item);    

  简单的去重算法

        其实去重的原理就是  将不同的值丢进一个空数组中

        上面说到空数组 因此要创建两个数组 一个记录下标的值

        

function uniq(arr,arr1 = [],index = 0){
    
}
let arr = [2,2,9,5,3,9,5,2,4,3,3,1];
$item = uniq(arr);
console.log($item);

        接下来就是判断空数组中是否有改值没有就push进去 值到遍历完arr后 返回arr1

 

      

function uniq(arr,arr1 = [],index = 0){
    if(arr[index] == undefined)return arr1;
    if(arr1.indexOf(arr[index]) == -1){
            arr1.push(arr[index]);
    }
    return uniq(arr,arr1,++index);
}
let arr = [2,2,9,5,3,9,5,2,4,3,3,1];
$item = uniq(arr);
console.log($item);

简单的会文算法

在该例子中我会分别检测asdsa  和 asdddsa  还有 aab 是否是回文 由于回文比较简单我就不做过多解释了

原理其实就是将值反转一下判断是否和原值相等 此处方法较多我子介绍那种在没有js时类似于c语言的算法

function isKaibun(str,str1 = "",index = str.length - 1){
    if(index < 0)return str === str1;
        str1 += str[index];
        return isKaibun(str,str1,--index);
}
console.log(isKaibun("asdsa"));  //true
console.log(isKaibun("asdddsa"));  //true
console.log(isKaibun("aab"));  //false

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值