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日

相关文章

  • js中关于Blob对象的介绍与使用

    什么是 Blob 对象 Blob 对象是 JavaScript 中的一个标准对象,它代表了一段二进制数据。通常我们会用它来存储二进制文件,比如图片、视频、音频等等。 在 JavaScript 中,我们可以使用 Blob 构造函数来创建一个 Blob 对象。它接受一个数组作为参数,数组元素可以是字符串、 ArrayBuffer 对象(用于表示二进制数据) 或 …

    JavaScript 2023年5月27日
    00
  • 深入浅析JavaScript中的Function类型

    让我们来深入浅析JavaScript中的Function类型。 1. Function类型介绍 在JavaScript中,Function类型是一等公民(first-class citizen)。这意味着你可以把函数赋值给变量,把函数作为参数传递给其他函数,以及把函数作为返回值。Function类型的实例是函数,可以像普通变量一样在代码中运用。 函数的创建 …

    JavaScript 2023年5月27日
    00
  • Firefox outerHTML实现代码

    下面是“Firefox outerHTML实现代码”的完整攻略。 什么是outerHTML 在开始介绍outerHTML实现代码之前,首先必须了解outerHTML的概念。outerHTML是一种操作DOM元素的属性,它可以获取或设置某个元素包括本身在内的HTML代码。 实现代码 在Firefox浏览器中实现outerHTML代码的方法如下: // 获取某个…

    JavaScript 2023年6月11日
    00
  • JS常用的几种数组遍历方式以及性能分析对比实例详解

    JS常用的几种数组遍历方式以及性能分析对比实例详解 在 JavaScript 中,数组遍历是开发者们经常需要用到的功能之一。在本文中,我们将介绍 JS 常用的几种数组遍历方式并进行一些性能分析对比。 常用的几种数组遍历方式 在 JavaScript 中,常用的几种数组遍历方式如下: 1. for 循环 for 循环是最基础的数组遍历方式,通过对数组的下标进行…

    JavaScript 2023年5月27日
    00
  • Android 一些常用的混淆Proguard

    下面是 Android 常用的混淆 Proguard 的完整攻略,主要包括以下几个部分: Proguard 简介 Proguard 的作用 Proguard 的启用和配置 Proguard 的一些示例说明 Proguard 简介 ProGuard 是一个 Java 代码混淆压缩工具,使用它可以对 Java 代码进行混淆和压缩,减小 APK 的大小,并且提高 …

    JavaScript 2023年6月10日
    00
  • 一起来了解javascript数组的方法

    下面是“一起来了解javascript数组的方法”的完整攻略: 一、介绍 JavaScript数组是一种万能的数据结构,它们充满了各种有用的操纵方法和属性。这里我们将探索一些我们最喜欢的方法和属性,解释它们是如何工作的,并展示如何使用它们。 二、数组的基本操作 1. 创建数组 在JavaScript中,有各种不同的方式可以创建Array。以下是几种常见的方式…

    JavaScript 2023年5月27日
    00
  • JS Html转义和反转义(html编码和解码)的实现与使用方法总结

    一、什么是Html编码和解码? Html编码和解码是将一些特殊的字符转化成HTML格式,以便在HTML页面中混排,并且不产生歧义,同时避免一些恶意代码的注入,以保证浏览器的渲染正确和安全。 Html编码一般针对特殊字符,比如<、>、”、’、&等进行转化;Html解码则是将已经编码的字符转回其原本的形式。常用的HTML编码和解码方式有两种:…

    JavaScript 2023年5月19日
    00
  • Javascript核心读书有感之语言核心

    请允许我对Javascript核心读书有感之语言核心进行详细讲解。在这份攻略中,我将为大家介绍Javascript语言核心的主要知识点,帮助读者更好的掌握该语言。 为什么要学习Javascript语言核心? Javascript是一种非常流行的脚本语言,广泛应用于Web开发、移动端开发和桌面应用程序开发等领域。对于想要从事前端开发、全栈开发、移动端开发等方向…

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