JS常见算法详解

yizhihongxing

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日

相关文章

  • 常用的9个JavaScript图表库详解

    常用的9个JavaScript图表库详解 1. Chart.js Chart.js 是一个使用 HTML5 canvas 元素创建图表的 JavaScript 库。它可以绘制多种类型的图表,例如线性图、柱状图、饼图等等。 Chart.js 具有良好的文档和易于使用的 API。它适合初学者和有经验的开发者。 以下是一个简单的例子: <canvas id=…

    JavaScript 2023年5月27日
    00
  • 微信小程序登录会话密钥session失效解决方案

    下面是关于微信小程序登录会话密钥session失效的解决方案的完整攻略。 问题描述 在微信小程序中,用户登录后会产生一个会话密钥session,用于后续的请求验证和用户信息获取。然而,由于多种原因,会话密钥session可能会失效,导致用户需要重新登录。具体来说,会话密钥session失效的主要原因包括: 会话时效。微信小程序规定,每个会话密钥session…

    JavaScript 2023年6月11日
    00
  • javascipt匹配单行和多行注释的正则表达式

    当我们编写JavaScript代码时,注释是很重要的一部分。在JavaScript中,注释可以被用来提供可读性和可维护性。其次,注释也可以用来排查问题,因为它们可以帮助我们理解代码。 在JavaScript中,有两种注释类型:单行注释和多行注释。单行注释以“//”开始,而多行注释以“/”开始,以“/”结束。正则表达式可以用来匹配这两种注释。 下面是匹配单行注…

    JavaScript 2023年6月10日
    00
  • js使用DOM设置单选按钮、复选框及下拉菜单的方法

    下面我为您详细讲解“js使用DOM设置单选按钮、复选框及下拉菜单的方法”的完整攻略。 一、DOM设置单选按钮的方法 要设置单选按钮,首先需要获取所有单选按钮,然后遍历它们,找到需要选中的单选按钮,然后给它添加 checked 属性即可。 以下是具体代码示例: <input type="radio" name="gender…

    JavaScript 2023年6月10日
    00
  • ajax异步请求详解

    AJAX异步请求详解 概念 AJAX是Asynchronous JavaScript and XML的缩写,即通过JavaScript异步发送HTTP请求,获取服务器返回的数据,再通过JavaScript动态更新页面内容,而无需刷新整个页面的技术。在AJAX中,XML通常作为数据传输格式,但也可以使用其他数据格式,如HTML、JSON等。 实现方式 要使用A…

    JavaScript 2023年6月11日
    00
  • Javascript 面向对象(一)(共有方法,私有方法,特权方法)

    下面是针对”Javascript 面向对象(一)(共有方法,私有方法,特权方法)”的详细讲解: 什么是面向对象编程? 面向对象编程是一种编程思想,它将数据和操作数据的行为封装在一起,形成一种对象。在面向对象编程中,对象都有自己的状态和行为,对象之间通过调用彼此的方法来进行协作完成任务。 在Javascript中,可以使用对象字面量或者构造函数创建对象。对象字…

    JavaScript 2023年5月27日
    00
  • HTML5中的document.visibilityState

    在 HTML5 中,文档对象(即 document 对象)具有一个 visibilityState 属性,该属性表示当前文档对象的可见性状态。 visibilityState 可能的取值有以下三种: – visible :表示文档当前处于激活状态,即当前选项卡处于前台或当前窗口处于屏幕最上层。- hidden :表示文档当前处于非激活状态,即当前选项卡处于后…

    JavaScript 2023年5月5日
    00
  • 浅谈js中对象的使用

    浅谈JS中对象的使用 Javascript是一门面向对象的语言,因此对象是其核心之一。对象是JS编程中的重要特性之一,也是数据在JS中的主要形式。本篇文章将介绍JS中对象的基础概念、使用方法及常用技巧。 什么是对象 在JavaScript中,对象是一个值(value),这个值可以被当作一个容器,存储一组属性/方法(properties/methods)。每个…

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