JS 排序算法

news2024/11/25 11:50:01

在前端工作中算法不常用,但是排序可能会经常会用,下面学习几种常用算法。

引用借鉴:js的五种排序方法_js排序_木可生森的博客-CSDN博客

JS 常见的排序算法_js排序算法_东风过境F的博客-CSDN博客

1.冒泡排序:

        思路:逐次判断两个相邻元素,大于则交换位置

        步骤:从数组中第一个数开始,依次与下一个数比较并次交换比自己小的数,直到最后一个数,执行n-1轮,直到排序结束

        图例展示     

        代码展示

  function bubbleSort(arr) {
        //外层控制轮数,每一次找到一个最大值
        for (var i = 0; i < arr.length; i++) {
            // 内层循环,控制比较的次数,并且判断两个数的大小 
            for (var j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j] > arr[j + 1]) {
                    var temp = arr[j]
                    arr[j] = arr[j + 1]
                    arr[j + 1] = temp
                }
            }
        }
        return arr
    }

let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
let newArr = bubbleSort(arr);

2.选择排序

        思路:从所有记录中选出最小的一个数据元素与第一个位置的记录交换;然后在剩下的记录当中再找最小的与第二个位置的记录交换,循环到只剩下最后一个数据元素为止。

        图例展示在这里插入图片描述

        代码展示

  function selectSort(arr) {
        var minIndex
        var temp
        var len = arr.length
        for (var i = 0; i < len; i++) {
            minIndex = i
            for (var j = i + 1; j < len; j++) {
                if (arr[j] < arr[minIndex]) {
                    minIndex = j
                }
            }
            temp = arr[i]
            arr[i] = arr[minIndex]
            arr[minIndex] = temp
        }
        return arr
    }
  let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
  let newArr = selectSort(arr);

3.快速排序

        思路:取一个基准值,比基准值小的在左边,大的在右边;左右在继续这样的操作,最后合并。

        图例展示在这里插入图片描述

        代码展示 

   function quickSort(arr) {
        if (arr.length <= 1) {
            return arr
        }
        var quickIndex = Math.floor(arr.length / 2)
        var mid = arr.splice(quickIndex, 1)[0]
        var left = []
        var right = []
        for (var i = 0; i < arr.length; i++) {
            if (arr[i] > mid) {
                left.push(arr[i])
            } else {
                right.push(arr[i])
            }
        }
        return quickSort(right).concat([mid], quick_sort(left))
    }
let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
let newArr = quickSort(arr);

4. 插入排序

        思路:从待排序的n个记录中的第二个记录开始,依次与前面的记录比较并寻找插入的位置,每次外循环结束后,将当前的数插入到合适的位置。

        代码展示

function insertionSort(arr) {
        for (var i = 1; i < arr.length; i++) {
            var key = arr[i];
            var j = i - 1;
            while (arr[j] > key) {
                arr[j + 1] = arr[j];
                j--;
            }
            arr[j + 1] = key;
        }
        return arr;
 }

let arr = [44,3,38,5,47,15,36,26,27,2,46,4,19,50,48];
let newArr = insertionSort(arr);

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

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

相关文章

儿童节快乐,基于CSS3绘制一个游乐场动效界面

0️⃣写在前面 让代码创造童话&#xff0c;共建快乐世界。六一儿童节——这是属于孩子们的节日&#xff0c;也是属于我们大人的节日。让我们一起「致童真」&#xff0c;用代码&#xff08;HTMLCSSJS&#xff09;创造出一个游乐场&#xff0c;让这个世界多一份快乐和惊喜&#x…

如何把vue项目部署服务器(宝塔面板)上

一&#xff0c;vue项目打包 首先我们把准备好的vue项目进行打包&#xff1a; 输入命令&#xff1a;npm run build 生成dist文件 二、进入宝塔管理界面&#xff0c;点击网站&#xff0c;然后点击添加站点 三。按下面输入 点设置 四。 输入好点添加&#xff0c;注意&#x…

【Python开发】FastAPI 04:响应模型

响应模型是指在接口调用之后&#xff0c;服务器返回给客户端的数据模型。这个数据模型可以是一个简单的字符串&#xff0c;也可以是一个复杂的数据结构&#xff0c;如 JSON 或 XML 格式的数据。本篇文章将详细介绍 FastAPI 中的响应模型。 目录 1 响应模型 1.1 response_mode…

HTML--Java EE

目录 一、认识 HTML 标签 二、HTML 文件基本结构 三、开发者工具 四、HTML常见标签 1.注释标签 2.标题标签&#xff08;h1-h6&#xff09; 3.段落标签&#xff08;p&#xff09; 4.换行标签 5.格式化标签 6.图片标签&#xff08;img&#xff09; 6.1网络路径 6.2绝…

Mysql索引慢解决

索引慢解决 explain关键字 explainSQL id执行顺序&#xff0c;id相同从上到下&#xff1b;id不同&#xff0c;如果是子查询id序号会递增&#xff0c;id值越大优先级越高&#xff1b;id相同和不同都存在时&#xff0c;id相同理解为一组&#xff0c;从上往下顺序执行&#xff0…

最优化——几种重要的凸集

引言 这是中科大最优化理论的笔记&#xff0c;中科大凌青老师的凸优化课程&#xff0c;详尽易懂&#xff0c;基础扎实。不论是初学者还是从业多年的人&#xff0c;都值得系统地好好学一遍。 本文介绍种重要的凸集:超平面与半空间、球和椭球、多面体、单纯形。 超平面与半空间…

202314读书笔记|《孩子们的诗》——简单的语言,击中每个人心中的诗意

202314读书笔记|《孩子们的诗》——简单的语言&#xff0c;击中每个人心中的诗意 《孩子们的诗》作者果麦。这本书中的诗都是孩子们写的&#xff0c;虽然他们或许并不认为自己写的是诗。每个人都想一直做一个孩子&#xff0c;好奇、天真、单纯、善良、简单&#xff0c;多美美好…

【产品应用】一体化步进电机在全自动折页机的应用

随着科技的不断发展&#xff0c;机器人技术也越来越成熟&#xff0c;智能化和自动化已经成为了现代工业的发展趋势。在这个趋势下&#xff0c;全自动折页机作为一种高效、精确的印刷设备&#xff0c;被广泛应用于各种印刷品的生产中。而一体化步进电机作为全自动折页机的关键部…

SpringBoot+Vue 前后端分离在线学习平台-在线教育平台

SpringBootVue 前后端分离在线学习平台-在线教育平台 本项目是完整的前后端分离&#xff0c;在线学习系统。【有完整部署视频教程】 创新点&#xff1a; ①基于阿里云短信平台完成手机号变更【短信验证码】 ②基于支付宝沙箱支付完成在线购买课程【在线支付】 ③基于apach-echa…

【Python】函数 ② ( 函数参数定义和使用 | 形式参数和实际参数 )

文章目录 一、函数参数定义和使用二、形式参数和实际参数 一、函数参数定义和使用 Python 函数参数 作用 : 在 Python 函数 执行时 , 可以 接受 外部 函数调用者 提供的数据 ; 在 Python 函数中 , 可以接受零个或多个参数 , 这些参数可以传递到函数中进行操作 ; 函数参数也可…

Java并发(九)----线程join、interrupt

1、join 方法详解 1.1 为什么需要 join&#xff1f; 下面的代码执行&#xff0c;打印 r 是什么&#xff1f; static int r 0; public static void main(String[] args) throws InterruptedException {test1(); } private static void test1() throws InterruptedException …

用C++ 包装STM32 官方固件库 - 链式调用改写初始化结构体

拿C 在固件库上套娃一层有几点原因&#xff1a; 固件库都是用C 写的&#xff0c;而我平时都用C&#xff0c;虽然是兼容的&#xff0c;但C 的一些特性我不喜欢&#xff1b;我不喜欢官方库的函数命名风格&#xff1b;各个厂家的固件库大同小异&#xff0c;但是“小异”的那一部分…

路径规划算法:基于旗鱼优化的路径规划算法- 附代码

路径规划算法&#xff1a;基于旗鱼优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于旗鱼优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能优化算法旗鱼…

Direct3D 12——几何——基础

在几何里可分为两种几何&#xff0c;一种是显式几何&#xff0c;另外一种是隐式几何。有不同的方式表示不同的几何 隐式几何 隐式实际上是说不会告诉具体的这些点点就在哪&#xff0c;只告诉你这些点满足的关系。表示一定的关系但并不会给实际的点 例子&#xff1a; 隐式几何…

Ubuntu开机桌面黑屏只有鼠标问题解决办法(搜狗输入法导致)

参考&#xff1a; Ubuntu开机桌面黑屏只有鼠标问题解决办法&#xff08;搜狗输入法导致&#xff09; 问题描述 笔者在安装完搜狗输入法重启电脑后&#xff0c;电脑开机黑屏&#xff0c;只有鼠标的光标可以移动。笔者一开始以为是系统问题&#xff0c;网上查阅资料才发现有大量…

华为OD机试之全量和已占用字符集(Java源码)

全量和已占用字符集 题目描述 给定两个字符集合&#xff0c;一个是全量字符集&#xff0c;一个是已占用字符集&#xff0c;已占用字符集中的字符不能再使用。 输入描述 输入一个字符串 一定包含&#xff0c;前为全量字符集 后的为已占用字符集已占用字符集中的字符一定是全量字…

安全架构审计

安全架构审计 目录概述需求&#xff1a; 设计思路实现思路分析1.什么是安全架构审计2.安全架构审计工具3.现在使用的工具4.安全架构审计报告 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;ski…

最全Python+Selenium环境搭建教程-你绝对想不到有这么简单!

一&#xff0c;Selenium 简介 在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;_哔哩哔哩_bilibili在华为工作了10年的大佬出的Web自动化测试教程&#xff0c;华为现用技术教程&#xff01;共计16条视频&#xff0c;包括&#xff1a;1. …

力扣动态规划专题(一)509 70 746 62 63 343 96 思路及C++实现

文章目录 动态规划509. 斐波那契数五步骤代码 70. 爬楼梯五步骤代码 746. 使用最小花费爬楼梯五步骤代码扩展 62. 不同路径动态规划数论 63. 不同路径 II五步骤代码 343. 整数拆分五步骤代码 96.不同的二叉搜索树五步骤代码 注意点&#xff1a; 动态规划 动态规划&#xff0c;…

Java多线程学习2

1. 多线程 线程与任务的关系 脱离了任务的线程是没有意义的 线程对象是通过Thread类来创建的 任务是通过Runnable接口来定义的 1.继承Thread类 2.实现Runnable接口 3.实现Callable接口 &#xff08;与Runnable的区别&#xff0c;可以拿到返回值&#xff09; Thread线程…