JS常见算法详解

JS常见算法详解

前言

本文将给读者介绍JS中常见的算法,包括排序、查找等。算法是程序设计的基础,对于程序员来说,学好算法是非常重要的。相信通过学习本文,读者可以对算法有更加深入的理解。

排序算法

冒泡排序

冒泡排序算法采用交换方式,将待排序数组中相邻的两个数进行比较,较大的数后移一位,较小的数前移一位。经过一次遍历,最大的数就被交换到了最后。不断重复这个过程,直到所有数都排好序。

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

快速排序

快速排序算法采用分治法,将待排序数组分成两个子数组,将小于某个值的元素放到左边,将大于某个值的元素放到右边。然后对左右两个子数组递归执行同样的操作,最终形成有序数组。

function quickSort(arr) {
    if(arr.length <= 1) {  // 元素个数小于等于1,返回整个数组
        return arr;
    }
    var pivotIndex = Math.floor(arr.length / 2);  // 取中间元素作为基准值
    var pivot = arr.splice(pivotIndex, 1)[0];  // 将该元素从数组中移除,并取出该元素
    var left = [];
    var right = [];
    for(var i = 0; i < arr.length; i++) {
        if(arr[i] < pivot) {
            left.push(arr[i]);
        } else {
            right.push(arr[i]);
        }
    }
    return quickSort(left).concat([pivot], quickSort(right));  // 递归左右两个子数组,最终合并成有序数组
}

查找算法

二分查找

二分查找算法是针对有序列表的一种查找方式。原理是将待查找元素与列表中中间位置的元素进行比较,若相等,则返回该位置;若小于中间元素,就继续在左边查找;若大于中间元素,则继续在右边查找。重复此过程,直到查找到该元素,或者列表已遍历完毕。

function binarySearch(arr, value) {
    var low = 0;
    var high = arr.length - 1;
    while(low <= high) {
        var mid = Math.floor((low + high) / 2);
        if(arr[mid] == value) {
            return mid;  // 找到该元素,返回位置
        } else if(arr[mid] < value) {
            low = mid + 1;  // 在右边查找
        } else {
            high = mid - 1;  // 在左边查找
        }
    }
    return -1;  // 没有找到该元素
}

哈希查找

哈希查找算法是通过哈希表来实现查找的方式,原理是将待查找元素作为关键字,通过哈希函数计算出该元素在哈希表中的位置,然后进行查找。若该位置的元素与待查找元素相等,则返回该元素的值;若不相等,则根据哈希函数的定义找到下一个元素的位置,继续查找。如果遇到哈希表的某个位置的元素为null,则说明该元素不存在于哈希表中。

function hashSearch(arr, value) {
    var table = {};  // 哈希表
    for(var i = 0; i < arr.length; i++) {  // 将数组元素存入哈希表
        table[arr[i]] = arr[i];
    }
    var key = value % arr.length;  // 计算待查找元素的哈希值
    while(table[key]) {  // 若该位置不为空
        if(table[key] == value) {  // 找到该元素
            return key;
        } else {
            key = (key + 1) % arr.length;  // 继续查找下一个元素
        }
    }
    return -1;  // 没有找到该元素
}

总结

本文讲述了两种排序算法和两种查找算法。排序算法是程序设计中常见的技术,通过本文的介绍,读者可以更加深入地理解这些算法的原理和实现。查找算法同样广泛应用于程序设计的各个领域,读者可以根据不同的需求选择不同的算法来实现相应的功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS常见算法详解 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • Javascript验证用户输入URL地址是否为空及格式是否正确

    关于JavaScript验证用户输入URL地址是否为空及格式是否正确的攻略,可以按照以下步骤实现: 步骤一:获取用户输入的URL地址 获取用户输入的URL地址。可以使用document.getElementById()或document.querySelector()等方法获取用户输入的URL地址。 const urlInput = document.get…

    JavaScript 2023年6月10日
    00
  • 关于前端文件下载各类方式大汇总

    关于前端文件下载各类方式大汇总 在前端开发中,文件下载是一个非常常见的需求场景,常见的文件下载方式有很多种,本文旨在对这些方式进行总结、分类和详细介绍。 1. 使用浏览器下载 使用浏览器下载文件一般都是直接让用户点击链接或者按钮进行下载。这种方式非常简单,只需要在链接或按钮上添加一个download属性即可实现下载功能。例如: <a href=&quo…

    JavaScript 2023年5月27日
    00
  • Javascript之String对象详解

    Javascript之String对象详解 String对象简介 String对象是Javascript中的基本对象之一,用来表示字符串类型。在Javascript程序中,经常需要对字符串进行各种处理,使用String对象提供的方法便可轻松实现。 String对象的创建 可以使用字面量、字符串构造函数或toString()函数来创建String对象。 var…

    JavaScript 2023年6月10日
    00
  • 微信小程序用户授权获取手机号(getPhoneNumber)

    当需要获取微信小程序用户的手机号时,我们需要先进行用户授权,具体步骤如下: 在小程序中使用 button 组件,设置属性 open-type=”getPhoneNumber”,代码如下: <button open-type="getPhoneNumber" bindgetphonenumber="onGetPhoneNum…

    JavaScript 2023年6月10日
    00
  • JavaScript加密解密7种方法总结分析

    JavaScript加密解密7种方法总结分析 JavaScript加密解密是前端工程师必须掌握的技能之一,本文总结了7种常见的JavaScript加密解密方法,并且提供了详细的代码示例。 1. Base64编码与解码 Base64是一种将二进制数据编码为文本的编码规则,其不仅可以用于前端加密解密,也可以用于图片、音频等二进制数据的传输。具体的编码和解码方法如…

    JavaScript 2023年5月19日
    00
  • JavaScript的21条基本知识点

    下面我将为您详细讲解“JavaScript的21条基本知识点”完整攻略。 JavaScript的21条基本知识点 1. 什么是JavaScript? JavaScript是一种脚本语言,用于编写交互式网页。JavaScript可以用于控制HTML页面中的各种事件,如按钮点击、表单提交、页面滚动等。 2. 变量和数据类型 JavaScript中的数据可以分为以…

    JavaScript 2023年5月17日
    00
  • JS实现倒计时和文字滚动的效果实例

    请看下方内容。 JS 实现倒计时效果 HTML 结构 首先,我们需要在 HTML 中创建一个对应的元素,用于显示倒计时效果,例如: <div id="countdown"></div> JS 代码实现 然后,我们需要编写 JS 代码来控制倒计时效果。具体实现过程如下: 初始化倒计时时间 let countDownD…

    JavaScript 2023年6月11日
    00
  • ASP.NET 窗体间传值的方法

    ASP.NET是一种基于Web应用程序的框架,可以轻松实现Web开发,并提供了多种窗体间传值的方法。 一、Query String Query String是通过在URL上添加查询字符串的方法。例如,可以使用以下代码在源页面中将值传递到目标页面: string url = "targetPage.aspx?name=" + txtName…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部