一些简单算法的代码模板总结【js版】

这篇博客介绍了JavaScript实现的基本算法,包括冒泡排序、斐波那契数列、质数判断、阶乘计算、幂次运算以及数字的位操作。此外,还涉及到了随机数生成和汉诺塔问题的解决方法,适合有一定编程基础的学习者快速入门JavaScript算法。
摘要由CSDN通过智能技术生成

js算法模板


本篇初衷写于javascript期末考试,但也总结一些算法当成一篇博客。适用于有其他编程语言基础但是想快速入门js的人看。

排序

// 冒泡排序降序
function bubbleSort(array) {
    for (let i = array.length - 1; i >= 1; i--) {
        for (let j = 1; j <= i; j++) {
            if (array[j] > array[j - 1]) {
                let temp = array[j];
                array[j] = array[j - 1];
                array[j - 1] = temp;
            }
        }
    }
    return array;
}

斐波那契数列 提前构造数组

let arr = [0, 1];

function getLast(arr) {
    return arr[arr.length - 1];
}

function getLastLast(arr) {
    return arr[arr.length - 2];
}

for (let i = 0; i < 1000; i++) {
    arr.push(getLast(arr) + getLastLast(arr));
}

// 获取斐波那契数列第n项
function feiN(n) {
    if (n <= 1) {
        return 0  // 第一项是0
    }
    if (n === 2) {
        return 1  // 第二项是1
    }
    return feiN(n - 1) + feiN(n - 2);
}

质数

// 判断质数
function isPrime(n) {
    if (n <= 1) {
        return false;
    }
    // 优化了一下复杂度
    for (let i = 2; i < Math.floor(Math.sqrt(n)) + 1; i++) {
        if (n % i === 0) {
            return false;
        }
    }
    return true;
}

阶乘

function jie(n) {
    return n === 1 ? 1 : n * jie(n - 1);
}

幂次

// n 的 +m 次方
function pow(n, m) {
    if (m === 0) {
        return 1;
    }
    let res = n;
    for (let i = 1; i < m; i++) {
        res *= n;
    }
    return res;
}

获取某一位

/**
 * 获取一个数从右往左侧
 * @param number
 * @param w 如果是1,就是取个位数
 */
function getWei(number, w) {
    function pow(n, m) {
        if (m === 0) {
            return 1;
        }
        let res = n;
        for (let i = 1; i < m; i++) {
            res *= n;
        }
        return res;
    }
    return Math.floor((number % (pow(10, w))) / pow(10, (w - 1)));
}

绝对值

// 绝对值也自己手动实现
function abs(n, m) {
    if (m > n) {
        return m - n;
    } else {
        return n - m;
    }
}

随机

// 从数组中随机取出一个元素
function choice(arr) {
    return arr[Math.floor(Math.random() * arr.length)];
}
// 随机小数范围
function uniform(left, right) {
    return Math.random() * (right - left) + left;
}
// [left, right] 随机整数
function randint(left, right) {
    return Math.floor(Math.random() * (right - left + 1) + left);
}

汉诺塔

function hanno(n, a, b, c) {
    if (n === 1) {
        console.log(a, "=>", c);
    } else {
        hanno(n - 1, a, c, b);
        console.log(a, "=>", c);
        hanno(n - 1, b, a, c);
    }
}

hanno(3, "a", "b", "c");
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值