【数据结构与算法】排序

概述

最容易想到的排序,从旧数组中找到一个最小的,不断放入新的数组中。(不使用数组的slice等方法是因为会使效率变得更慢)

let arr = [3, 5, 6, 7, 1, 2, 4, 9, 8]function getMin(arr) {if (arr == null || arr.length == 0) returnlet index = -1for (let i = 0; i < arr.length; i++) {if (arr[i] != null && arr[i] < arr[index] || arr[i] != null && index == -1) {index = i}}let result = arr[index]arr[index] = nullreturn result
}function sort(arr) {let newArr = new Array(arr.length)for (let i = 0; i < newArr.length; i++) {newArr[i] = getMin(arr)}return newArr
}console.log(sort(arr))

冒泡排序

任何排序的本质都是比较和交换。

let arr = [3, 5, 6, 7, 1, 2, 4, 9, 8]function compare(b, a) {return b > a;
}function exchange(arr, a, b) {let temp = arr[a]arr[a] = arr[b]arr[b] = temp
}function sort(arr) {for (let j = 0; j < arr.length; j++) {//  arr.length - 1 - i 单轮比较 索引到倒数第二个数//  外层循环影响内层循环 每次少比较 i 次(末尾的数不断确定)for (let i = 0; i < arr.length - 1 - i; i++) {if (compare(arr[i], arr[i + 1])) {exchange(arr, i, i + 1)}}}
}sort(arr)
console.log(arr)

选择排序

任何一种排序算法,都没有优劣之分,只有适不适合的场景。

越混乱越适合快速排序,越有序越适合冒泡排序。选择排序在性能上居中。

let arr = [3, 5, 6, 7, 1, 2, 4, 9, 8]function compare(b, a) {return b > a;
}function exchange(arr, a, b) {let temp = arr[a]arr[a] = arr[b]arr[b] = temp
}function sort(arr) {for (let j = 0; j < arr.length; j++) {let maxIndex = 0for (let i = 0; i < arr.length - j; i++) {if (compare(arr[maxIndex], arr[i])) {maxIndex = i}}exchange(arr, maxIndex, arr.length - 1 - j)}
}sort(arr)
console.log(arr)

快速排序(浪费性能但精简版)

以下版本浪费了性能,但是极大降低了理解难度。

思路分析:选一个中间值,然后遍历其他值,比中间值大的放一边,比中间值小的放另一边。再分别递归左右数组。

let arr = [3, 5, 6, 7, 1, 2, 4, 9, 8]function quickSort(arr) {if (arr == null || arr.length == 0) return []let middle = arr[0]let left = []let right = []for (let i = 1; i < arr.length; i++) {if (arr[i] < middle) {left.push(arr[i])} else {right.push(arr[i])}}left = quickSort(left)right = quickSort(right)left.push(middle)return left.concat(right)
}
console.log(quickSort(arr))

快速排序(完整版)

let arr = [3, 5, 6, 7, 1, 2, 4, 9, 8]/*** 交换索引为 a 和 b 索引的元素* @param arr* @param a* @param b*/
function swap(arr, a, b) {let temp = arr[a]arr[a] = arr[b]arr[b] = temp
}function quickSort(arr, begin, end) {let left = beginlet right = endwhile (left < right) {while (left < right && arr[right] > arr[begin]) {right--}while (left < right && arr[left] > arr[begin]) {left++}swap(arr, left, right)}if (begin < left - 1) quickSort(arr, begin, left - 1)if (left + 1 < end) quickSort(arr, left + 1, end)swap(arr, begin, left)return arr
}function sort(arr) {return quickSort(arr, 0, arr.length - 1)
}console.log(sort(arr))

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

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

相关文章

Oracle VM(虚拟机)性能监控工具

Oracle VM是一个独立的虚拟化环境&#xff0c;由 Oracle 提供支持和设计&#xff0c;旨在为运行虚拟机提供轻量级、安全的基于服务器的平台。Oracle VM 能够在受支持的虚拟化环境中部署操作系统和应用软件&#xff0c;Oracle VM 将用户和管理员与底层虚拟化技术隔离开来&#x…

cmake编译faiss源码记录

文章目录 简介下载源码安装环境编译 简介 Faiss&#xff08;Facebook AI Similarity Search&#xff09;是一个由Facebook AI研发并开源的&#xff0c;用于大规模向量检索的库。其核心算法采用了聚类、压缩和量化等技术&#xff0c;以优化最近邻搜索的效率和准确性。Faiss提供…

ctfshow xxe web373-378

web373 libxml_disable_entity_loader(false)&#xff1a;这行代码用于启用实体加载器&#xff0c;允许加载外部实体。 $xmlfile file_get_contents(php://input)&#xff1a;从输入流中读取XML数据并存储在 $xmlfile 变量中。 $dom->loadXML($xmlfile, LIBXML_NOENT |…

异常信息泄露 应用程序错误泄露 原理以及修复方法

漏洞名称&#xff1a;未自定义统一错误页面导致信息泄露&#xff0c;抛出异常信息泄露&#xff0c;错误详情信息泄漏&#xff0c;AWVS漏洞名称如下&#xff1a; Application error message Error message on page ASP.NET error message 漏洞描述&#xff1a;攻击者可通过构造…

FebHost:意大利.IT域名一张意大利网络名片

.IT域名是意大利的国家顶级域名&#xff0c;对于意大利企业和个人而言,拥有一个属于自己的”.IT”域名无疑是件令人自豪的事。这个被誉为意大利互联网标志性代表的域名,不仅隐含着浓厚的意大利文化特色,还为使用者在当地市场的推广铺平了道路。 对于那些希望在意大利市场建立强…

微信开发者工具接入短剧播放器插件

接入短剧播放插线 申请添加插件基础接入app.jsonapp.jsplayerManager.js数据加密跳转到播放器页面运行出错示例小程序页面页面使用的方法小程序输入框绑定申请添加插件 添加插件:登录微信开发者平台 ——> 设置 ——> 第三方设置 ——> 插件管理 ——> 搜索“短剧…

基于SpringBoot + Vue实现的养老院管理系统设计与实现+毕业论文(12000字)+搭建视频

介绍 养老院管理系统是一款运用软件开发技术设计实现的应用系统&#xff0c;在信息处理上可以达到快速的目的&#xff0c;不管是针对数据添加&#xff0c;数据维护和统计&#xff0c;以及数据查询等处理要求&#xff0c;养老院管理系统都可以轻松应对。 系统包含登录、注册、…

蓝桥杯每日不知道多少题之更小的数

题目链接&#xff1a;更小的数 - 洛谷 P9232 - Virtual Judge (vjudge.net) 解题思路&#xff1a;这个题看数据量是可以过n方的算法的&#xff0c;首先考虑dp&#xff0c;那么则是两层for循环&#xff0c;即枚举所有情况&#xff0c;那么怎么进行状态转移呢&#xff0c;当 s[i…

Linux 系统 docker搭建LNMP环境

1、安装nginx docker pull nginx (默认安装的是最新版本) 2、运行nginx docker run --name nginx -p 80:80 -d nginx:latest 备注&#xff1a;--name nginx 表示容器名为 nginx -d 表示后台运行 -p 80:80 表示把本地80端口绑定到Nginx服务端的 80端口 nginx:lates…

【YOLOv5改进系列(9)】高效涨点----使用CAM(上下文增强模块)替换掉yolov5中的SPPF模块

文章目录 &#x1f680;&#x1f680;&#x1f680;前言一、1️⃣ CAM模块详细介绍二、2️⃣CAM模块的三种融合模式三、3️⃣如何添加CAM模块3.1 &#x1f393; 添加CAM模块代码3.2 ✨添加yolov5s_CAM.yaml文件3.3 ⭐️修改yolo.py文相关文件 四、4️⃣实验结果4.1 &#x1f39…

【阅读笔记】《你的第一本博弈论》

博弈论入门书&#xff0c;很多例子方便理解 副标题: 用博弈论解决工作和生活的难题 作者&#xff1a;欧俊 笔记 CH1 博弈论&#xff1a;最高级的思维和生存策略 博弈的分类&#xff1a; • 负和博弈 • 零和博弈 • 正和博弈 博弈论带给我们的启示&#xff1a; • 要会选择 …

Leetcode 82. 删除排序链表中的重复元素 II

给定一个已排序的链表的头 head &#xff0c; 删除原始链表中所有重复数字的节点&#xff0c;只留下不同的数字 。返回 已排序的链表 。 输入&#xff1a;head [1,2,3,3,4,4,5] 输出&#xff1a;[1,2,5] 提示&#xff1a; 链表中节点数目在范围 [0, 300] 内 -100 < Node.…

一些实用的功能函数

1. 【算法】求两个数中&#xff0c;bit位不同的个数&#xff08;在计网那道题中用过&#xff09; 解法&#xff1a;首先把两位数异或&#xff0c;得到的结果&#xff0c;通过自身跟自身-1相与&#xff0c;直到等于0为止 代码如下&#xff1a; int calculateNotSam(int a,int …

uniapp怎么使用接口返回的iconfont图标

uniapp怎么使用接口返回的iconfont图标 首先在你的项目中添加该图标&#xff0c;名称要对应 实际应用 item.ICONFONT_NAME“tools”; item.ICONFONT_COLOR“FA5151”; <view class"iconfont" :class"icon-item.ICONFONT_NAME" :color"item.ICON…

ORACLE 存中文

笔记 oracle 存中文要用 nvarchar2 &#xff0c;涉及长度校验 NVARCHAR2和VARCHAR2的区别&#xff0c;从使用角度来看区别在于&#xff1a; NVARCHAR2在计算长度时和字符集相关&#xff0c; 例如数据库是中文字符集时&#xff0c;以长度10为例&#xff0c;则 NVARCHAR2(10)可…

Kubernetes Pod深度解析:构建可靠微服务的秘密武器(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Kubernetes航线图&#xff1a;从船长到K8s掌舵者》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Kubernetes概述 2、Pod概述 二、Po…

输出单链表倒数第K个结点值

方法一&#xff1a; 两次遍历链表。第一次遍历&#xff0c;计算链表长度&#xff0c;然后计算链表倒数第m个结点的正数位置k&#xff0c;判断位置是否合法&#xff0c;如果不合法&#xff0c;输出NOT FOUND&#xff0c;否则&#xff0c;进行第二次遍历链表&#xff0c;查找链表…

手写SpringBoot(三)之自动配置

系列文章目录 手写SpringBoot&#xff08;一&#xff09;之简易版SpringBoot 手写SpringBoot&#xff08;二&#xff09;之动态切换Servlet容器 手写SpringBoot&#xff08;三&#xff09;之自动配置 手写SpringBoot&#xff08;四&#xff09;之bean动态加载 手写SpringBoot…

企业培训系统功能介绍

在当今知识经济时代&#xff0c;企业的竞争力在很大程度上取决于员工的专业能力和综合素质。为了适应不断变化的市场需求和技术进步&#xff0c;企业需要对员工进行持续有效的培训。一个高效的企业培训系统对企业人才培训至关重要。以下介绍一下企业培训系统的主要功能&#xf…

电脑文件msvcp120.dll丢失的解决方法详细分析,找多种靠谱方法修复

遇到msvcp120.dll文件丢失的问题实际上不算罕见&#xff0c;这往往是由于我们频繁使用电脑而导致的意外删除&#xff0c;或者是电脑受到病毒感染。当这类情况发生时&#xff0c;msvcp120.dll文件可能会被错误地移除或损坏&#xff0c;这便需要我们去进行修复。接下来&#xff0…