js排序算法

news2024/12/27 11:11:05

排序算法 - js

    • js交换两个值的三种方法
      • 方式1:算术运算
      • 方式2:ES6解构
      • 方式3:数组的特性
    • 冒泡排序
      • 实现思路
      • 图解
      • bubbleSort
      • 参考视频
    • 选择排序
      • 实现思路
      • 图解
      • selectionSort
      • 参考视频
    • 插入排序
      • 实现思路
      • 图解
      • insertionSort
      • 参考视频

js交换两个值的三种方法

方式1:算术运算

function swap1(arr, i, j) {
    let temp = arr[i];
    arr[i] = arr[j];
    arr[j] = temp
}

方式2:ES6解构

不需要第三方变量

function swap2(arr, i, j) {
    [arr[j], arr[i]] = [arr[i], arr[j]]
}

方式3:数组的特性

function swap3(arr, i, j) {
    const temp = [arr[i], arr[j]]
    arr[i] = temp[1]
    arr[j] = temp[0]
}

冒泡排序

实现思路

  1. 通过相邻元素比较和交换
  2. 使得每一趟遍历,最后的一个数数都是最大
  3. 循环都能找到未排序的子数组,直到排序完成。

图解

在这里插入图片描述

bubbleSort

/**
 * @Name:
 * @author: liuk
 * @Description: 冒泡排序
 * @data: 2023/4/13
 **/
// Bubble Sort
const bubbleSort = (arr) => {
    const len = arr.length;
    if (!len) return []
    for (let i = 0; i < len; i++) {
        for (let j = 0; j < len - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr, j, j + 1)
            }
        }
    }
    return arr
}

参考视频

链接

选择排序

实现思路

  1. 通过已排序序列末尾元素
  2. 剩余元素的最小值的比较和交换(索引)
  3. 使得每一趟遍历,已排序序列从小到大排序,直到排序完成。

剩余元素为遍历节点之后的全部元素

图解

在这里插入图片描述

selectionSort

/**
 * @Name:
 * @author: liuk
 * @Description: 选择排序
 * @data: 2023/4/13
 **/
// Selection Sort
const selectionSort = (arr) => {
    const len = arr.length
    let minIndex;
    if (!len) return []
    for (let i = 0; i < len; i++) {
        minIndex = i
        for (let j = i; j < len; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j
            }
        }
        swap(arr, minIndex, i)
    }
    return arr
}

参考视频

链接

插入排序

实现思路

  1. 通过当前遍历节点的
  2. 已排序序列每个值进行比较和交换()
  3. 使得每一趟遍历,遍历节点前都为已排序序列,直到排序完成。

图解

在这里插入图片描述

insertionSort

/**
 * @Name:
 * @author: liuk
 * @Description: 插入排序
 * @data: 2023/4/13
 **/
// Insertion Sort
const insertionSort = (arr) => {
    const len = arr.length;
    let current;
    if (!len) return [];
    for (let i = 1; i < len; i++) {
        current = arr[i]
        let j = i - 1;//上一个元素
        while (j >= 0 && current < arr[j]) {
            arr[j + 1] = arr[j]
            j--
        }
        arr[j + 1] = current
    }
    return arr
}

参考视频

链接

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/422178.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

javaSccript---call()、 bind()、 apply()的区别

call()、apply()、bind() 都是用来重定义 this 这个对象的 语法&#xff1a; function.apply(thisArg, [argsArray])//argsArray 是一个可选的数组 function.call(thisArg, arg1, arg2, ...)//arg1、arg2、... 是将传递给函数的参数列表 function.bind(thisArg, arg1, arg2, ..…

Webstorm是什么软件?你了解吗

WebStorm 是一款由 JetBrains 开发的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它是专门为开发 Web 应用程序而设计的。它提供了许多功能&#xff0c;例如代码自动完成、错误突出显示、重构、调试、版本控制等&#xff0c;可以帮助开发人员提高效率和代码质量。WebS…

Vector 高性能日志收集工具

文章目录Vector 简介相关概念事件Data modelEvent typesLog eventsMetric eventsTraces组件构成源转换接收器PipelineBuffersBackpressureRolesAgentDaemonSidecarAggregatorTopology分布式集中式基于流Vector 简介 Vector 是一种高性能的可观察性数据管道&#xff0c;可让组织…

天梯赛练习集-L1-031到L1-040–python - java

文章目录PythonL1-031 到底是不是太胖了L1-032 Left-padL1-033 出生年L1-034 点赞L1-035 情人节L1-036 A乘以BL1-037 A除以BL1-038 新世界L1-039 古风排版L1-040 最佳情侣身高差JavaL1-031 到底是不是太胖了L1-032 Left-padL1-033 出生年L1-034 点赞L1-035 情人节L1-036 A乘以B…

ChatGPT入门必知必会

2023年是真正意义上的AI之年&#xff0c;因为ChatGPT 2007年&#xff0c;iPhone开启了智能手机时代&#xff0c;2023年&#xff0c;我们迎来了人工智能时代&#xff0c;我们正处于历史的大转折点上&#xff0c;这也许是启蒙运动级别的思想和社会转折&#xff0c;工业革命级别的…

5万元内最经济双卡4090深度学习方案

深度学习双卡4090攒机方案 znsoft 一枚快乐的炼丹师 AMD 7950x 双4090方案 不到5万&#xff0c;目前最经济的双卡人工智能服务器方案 主板&#xff1a; 华硕 x670EA 吹雪 3000元 CPU: amd 7950x 3500元 内存&#xff1a; 32G4 128G DDR5 800x4 3200元 机箱&#xff1a; 追…

【eMMC学习记录】emmc相关名词解释和基础概念

名词解释 NAND Flash:半导体闪存 HDD&#xff1a;机械硬盘 FW:固件 Peak Power:峰值功率 Active Power:读写功耗 Idle Power:空闲功耗 standby/sleep Power Dev Sleep Power:SSD内部休眠功耗 RAM:掉电丢失数据 FGT:浮栅晶体管 FormFactor:尺寸标准件 AFA:全闪存整列…

线段树之延迟数组_20230410

线段树 之 延迟数组 前言 线段树是一类特殊的完全二叉树&#xff0c;其本质是对递归过程信息的再处理和再记忆&#xff0c;线段树构造完成后&#xff0c;可以脱离原始数组或线性表&#xff0c;直接对线段树进行查询或更新操作即可。线段树的储存结构和堆结构类似&#xff0c;…

springboot——集成elasticsearch进行搜索并高亮关键词

目录 1.elasticsearch概述 3.springboot集成elasticsearch 4.实现搜索并高亮关键词 1.elasticsearch概述 &#xff08;1&#xff09;是什么&#xff1a; Elasticsearch 是位于 Elastic Stack 核心的分布式搜索和分析引擎。 Lucene 可以被认为是迄今为止最先进、性能最好的…

软测界的黑科技,难道不来瞧瞧?

写在前面&#xff1a; 在当今互联网时代&#xff0c;软件已经渗透到了人们生活的方方面面&#xff0c;各种类型的软件应运而生&#xff0c;为人们的工作和生活提供了更便捷的服务。然而&#xff0c;随着软件的不断增长和复杂性的不断提高&#xff0c;软件测试变得越来越重要。…

字节跳动AI-LAB | 算法三轮技术面分享

作者 | 太蔡了整理 | NewBeeNLP面试锦囊之面经分享系列&#xff0c;持续更新中 可以后台回复"面试"加入交流讨论组噢写在前面楼主是C9末流渣硕一枚&#xff0c;现在已经正式确定offer要去我宇宙条了&#xff01;当时为了准备面试几乎把网上头条的面经翻了个底朝天&am…

php(phar)反序列化漏洞及各种绕过姿势

概念&#xff1a; 序列化其实就是将数据转化成一种可逆的数据结构&#xff0c;自然&#xff0c;逆向的过程就叫做反序列化。简单来说就是我在一个地方构造了一个类&#xff0c;但我要在另一个地方去使用它&#xff0c;那怎么传过去呢&#xff1f;于是就想到了序列化这种东西&a…

句柄泄露的分析思路

基础知识 问题 什么是句柄&#xff1f; 句柄(file descriptor)即文件描述符&#xff0c;简称fd。Linux 系统中&#xff0c;把一切设备都视作文件&#xff0c;当进程打开现有文件或创建新文件时&#xff0c;内核向进程返回一个文件描述符。 FD作为文件句柄的实例&#xff0c;…

Nacos安装配置

一、下载Nacos Server。 通过Release页面进行下载&#xff0c;这里我以windows版本为例。 二、修改Nacos Server配置文件。 下载完成后&#xff0c;解压安装包后得到如下文件夹 为了配置集群&#xff0c;将nacos-server复制相同的两份&#xff0c;分别为命名为nacos-clust…

Java中有了equals(),为什么还有“==“

背景&#xff1a;Java中“一切皆是对象”&#xff0c;为什么还有非对象的“”&#xff1f; 在Java语言假设我们只进行OOP&#xff0c;所以Java代码都是由一个接着一个的类组成的。那么&#xff0c;对象之间比较&#xff0c;用equals()就可以了。 可为什么“”在代码随处可见呢…

海尔智家业绩尚可,但其智能家居“全场景”没做起来

‍数据智能产业创新服务媒体——聚焦数智 改变商业近日&#xff0c;海尔智家发布了其2022年年报&#xff0c;数据显示&#xff0c;2022年海尔智家实现收入2435.14亿元&#xff0c;同比增长7.2%&#xff1b;扣非归母净利润139.63亿元&#xff0c;同比增长18%&#xff0c;利润增…

消息队列kafka及zookeeper机制

目录 一、zookeeper 1、zookeeper简介 2、zookeeper特点 3、zookeeper工作模式及机制 4、zookeeper应用场景及选举机制 5、zookeeper集群部署 ①实验环境 ②安装zookeeper 二、消息队列kafka 1、为什么要有消息队列 2、使用消息队列的好处 3、kafka简介 4、kafka…

多模态模型学习1——CLIP对比学习 语言-图像预训练模型

多模态模型学习1——CLIP对比学习 语言-图像预训练模型学习前言什么是CLIP模型代码下载CLIP实现思路一、网络结构介绍1、Image Encodera、PatchPosition Embeddingb、Transformer EncoderI、Self-attention结构解析II、Self-attention的矩阵运算III、MultiHead多头注意力机制IV…

maya arnold自定义aov分层灯光组添加方法

一、问题描述&#xff1a; maya的arnold aov层灯光组(Light groups)运用有两种方法&#xff0c;总结一下使用笔记。灯光效果如下图&#xff1a; 二、制作过程&#xff1a; 1、灯光的布局主要用了两盏区域光&#xff0c;主光和辅助光。如下图&#xff1a; 2、主光为白色&am…

windows10下VS2019编译jpegsrc.v9e.tar.gz为lib静态库(已验证)

一、下载jpegsrc 1、下载JPEG库的源代码 http://www.ijg.org/files/ 2、这里使用最新的jpegsr9e.zip &#xff0c;别下载错误了&#xff08;jpegsrc.v9e.tar.gz 是RAM架构的仅支持32位&#xff09; 3、解压jpegsr9e.zip到d盘&#xff0c;如&#xff1a;D:\jpeg-9e 二、vs2019…