当前位置: 首页 > news >正文

JS排序算法--快排、归并、冒泡、选择、插入

1快速排序

时间复杂度-----最好 平均 O nlogn 最坏 O n2
稳定性:不稳定,因为元素的交换可能改变相同元素间的相对顺序

var sortArray = function(nums) {if (nums.length < 2) {return nums;}let mid = Math.floor(nums.length / 2); let pivot = nums[mid];let left = [];let right = [];for (let i = 0; i < nums.length; i++) {if (i === mid) continue; // 跳过中心元素if (nums[i] < pivot) {left.push(nums[i]);} else {right.push(nums[i]);}}return sortArray(left).concat(pivot, sortArray(right)); // 递归排序左右数组};

2归并排序

时间复杂度 都是O nlogn
稳定性:稳定,因为在合并时,如果遇到相等的元素,保持原有顺序

var sortArray = function(arr) {let len=arr.lengthif(len<2) return arrlet mid=Math.floor(len/2)let left=sortArray(arr.slice(0,mid))let right=sortArray(arr.slice(mid))return merge(left,right)
};
function merge(left,right){let i=0let j=0let res=[]while(i<left.length&&j<right.length){if(left[i]<right[j]){res.push(left[i])i++}else{res.push(right[j])j++}}return res.concat(left.slice(i)).concat(right.slice(j))
}

3冒泡排序

时间复杂度 最好O n 平均和最坏都是 O n2
稳定性:稳定,因为每次交换只涉及相邻元素,相同元素的顺序不会改变

var sortArray = function(arr) {let len=arr.lengthfor(let i=0;i<len-1;i++){for(let j=0;j<len-1;j++){if(arr[j]>arr[j+1]){//交换[arr[j],arr[j+1]]=[arr[j+1],arr[j]]}}}return arr
};

4选择排序

时间复杂度 都是O n2
稳定性:不稳定,因为在选择最小元素进行交换时,可能打破相同元素的相对顺序

function sortArray(arr){let len=arr.lengthfor(let i=0;i<len-1;i++){let minIndex=ifor(let j=i+1;j<len;j++){if(arr[j]<arr[minIndex]){minIndex=j}}if(minIndex!==i){[arr[i],arr[minIndex]]=[arr[minIndex],arr[i]]}}return arr
}

5插入排序

时间复杂度:最好O n 平均最坏 On2
稳定性:稳定,因为插入时,保持相同元素的顺序

function sortArray(arr){let len=arr.lengthfor(let i=1;i<len;i++){let key=arr[i]let j=i-1while(j>=0&&arr[j]>key){arr[j+1]=arr[j]j--}arr[j+1]=key}return arr
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 谈谈ES搜索引擎
  • 云原生 | 在 Kubernetes 中使用 Cilium 替代 Calico 网络插件实践指南!
  • 线性代数|机器学习-P36在图中找聚类
  • 计算机网络-VRRP切换与回切过程
  • muduo 网络库学习项目引入 Boost 依赖
  • “设计模式双剑合璧:工厂模式与策略模式在支付系统中的完美结合”
  • JLabel设置字体大小颜色背景色
  • 数据结构与算法03 顺序表+链表
  • 数字化转型专家讲师培训师唐兴通中欧国际工商学院数字化转型战略与实现路径AIGC人工智能数字化战略数字商业模式创新
  • Docker 详解及详细配置讲解
  • Linux安装Jenkins详细步骤分解
  • 前向渲染路径
  • js 查找数组对象中id相同的元素,把他们放到新数组对象中
  • 【系统架构设计师】管道-过滤器架构
  • 【Redis】Redis 主从复制原理与配置详解:解决单点故障与性能瓶颈的最佳方案
  • 深入了解以太坊
  • 《Javascript数据结构和算法》笔记-「字典和散列表」
  • 345-反转字符串中的元音字母
  • Angular6错误 Service: No provider for Renderer2
  • canvas 高仿 Apple Watch 表盘
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Invalidate和postInvalidate的区别
  • javascript从右向左截取指定位数字符的3种方法
  • jquery cookie
  • js作用域和this的理解
  • Lucene解析 - 基本概念
  • PHP CLI应用的调试原理
  • PHP 的 SAPI 是个什么东西
  • spring boot下thymeleaf全局静态变量配置
  • springMvc学习笔记(2)
  • webpack4 一点通
  • windows下使用nginx调试简介
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 记一次删除Git记录中的大文件的过程
  • 紧急通知:《观止-微软》请在经管柜购买!
  • 前端存储 - localStorage
  • 什么是Javascript函数节流?
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 这几个编码小技巧将令你 PHP 代码更加简洁
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • 选择阿里云数据库HBase版十大理由
  • ​如何在iOS手机上查看应用日志
  • "无招胜有招"nbsp;史上最全的互…
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #Datawhale X 李宏毅苹果书 AI夏令营#3.13.2局部极小值与鞍点批量和动量
  • #VERDI# 关于如何查看FSM状态机的方法
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $(this) 和 this 关键字在 jQuery 中有何不同?
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (23)Linux的软硬连接