前端常用排序算法

1.时间复杂度

  • n*n:冒泡排序、选择排序、插入排序
  • nlogn:快速排序、归并排序、堆排序

2.冒泡排序

  • 定义:每次都是相邻元素比较,第一个元素比第二个元素大则交换位置直到最后一个元素为最大,继续循环
  • 代码实现:
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+1];        // 元素交换arr[j+1] = arr[j];arr[j] = temp;}}}return arr;
}

3.选择排序

  • 定义:遍历未排序数组找出最小元素放到未排序数组的起始位置
  • 代码实现:
function selectionSort(arr) {var len = arr.length;var minIndex, temp;for (var i = 0; i < len - 1; 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;

4.插入排序

  • 定义:遍历未排序数组,将未排序元素与排序数组逐个比较,插入到对应位置
  • 代码实现:
function insertionSort(arr) {var len = arr.length;var preIndex, current;for (var i = 1; i < len; i++) {preIndex = i - 1;current = arr[i];while (preIndex >= 0 && arr[preIndex] > current) {arr[preIndex + 1] = arr[preIndex];    // 数组往前移preIndex--;                           // 获取数组下标}arr[preIndex + 1] = current;}return arr;
}

5.归并排序

  • 定义:利用递归的思想,数组不断拆分成小数组,小数组内部排序完成返回有序数组,根据返回结果递归形成完整有序数组
  • 代码实现:
function mergeSort(arr) {var len = arr.length;if (len < 2) {return arr;}var middle = Math.floor(len / 2),left = arr.slice(0, middle),right = arr.slice(middle);return merge(mergeSort(left), mergeSort(right));
}function merge(left, right) {var result = [];while (left.length>0 && right.length>0) {if (left[0] <= right[0]) {result.push(left.shift());} else {result.push(right.shift());}}while (left.length)result.push(left.shift());while (right.length)result.push(right.shift());return result;
}

6.快速排序

  • 定义:
    • 将第一个元素作为基准值,遍历数组,比基准小的放在左边,最后将第一个元素与最后一个左边元素调换位置
    • 以此类推,在左边以及右边的数组中重复该操作直至全部数组排序完成
  • 代码实现:
function quickSort(arr, left, right) {var len = arr.length,partitionIndex,left = typeof left != 'number' ? 0 : left,right = typeof right != 'number' ? len - 1 : right;if (left < right) {partitionIndex = partition(arr, left, right);quickSort(arr, left, partitionIndex-1);quickSort(arr, partitionIndex+1, right);}return arr;
}function partition(arr, left ,right) {     // 分区操作var pivot = left,                      // 设定基准值(pivot)index = pivot + 1;for (var i = index; i <= right; i++) {if (arr[i] < arr[pivot]) {swap(arr, i, index);index++;}       }swap(arr, pivot, index - 1);return index-1;
}function swap(arr, i, j) {var temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}

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

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

相关文章

圆锥曲线的分类

有一个圆锥 C C C&#xff0c;以及一个不过圆锥顶点的平面 Q Q Q。用解析几何证明&#xff1a;当平面平行于圆锥的轴时&#xff0c;交线是双曲线&#xff1b;当平面平行于圆锥的母线时&#xff0c;交线是抛物线&#xff1b;其它情况下&#xff0c;交线为椭圆&#xff08;包括圆…

Unity Maximum Allowed Timestep的说明

Maximum Allowed Timestep的说明 关于Maximum Allowed Timestep这个配置的说明&#xff0c;Unity有一份官方的说明。 Time-maximumDeltaTime - Unity 脚本 API 结合Unity的函数执行顺序&#xff0c;我们可以简单理解为&#xff1a; FixedUpdate在1次Update可能会执行N次&am…

如何平衡安全访问和办公效率?零信任安全×统一身份才是解决之道

在远程办公、混合办公、跨团队协作日益频繁的今天&#xff0c;企业的业务开展需要支持多种访问接入的需求和场景。如何平衡企业数据的安全访问和办公效率将成为挑战。 在业务的多种接入场景上&#xff0c;企业引入零信任&#xff08;Zero Trust&#xff0c;ZT&#xff09;产品…

ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(4)

接前一篇文章:ESP-IDF OTA升级过程中遇到的“esp_transport_read returned:-1 and errno:128”问题(3) 上一回讲到,笔者准备第二天围绕信号强度展开进一步测试。实际上没等到第二天,笔者在当天下午下班时间(18点)以后就进行了相关测试(不过测试倒并不是完全针对于信号强…

手机是如何实现多个应用程序同时运行的?

想要理解这个问题&#xff0c;我们要先了解一下操作系统以及进程相关的知识&#xff1a; 操作系统的功能有很多&#xff0c; 例如&#xff1a; 进程管理&#xff08;Process Management&#xff09;&#xff1a; 功能&#xff1a;创建和终止进程&#xff0c;进程调度&#xf…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续区间和(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 连续区间和(100分) 🌍 评测功能需要订阅专栏后私信联系清隆…

深入了解 Redis 五种类型命令与如何在 Java 中操作 Redis

Redis 是一个开源的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。Redis 支持五种主要的数据类型:字符串(string)、哈希(hash)、列表(list)、集合(sets)、有序集合(sorted sets)。下面我们将深入了解这五种类型的命令,并探讨如何在 Java 中操作…

Hive数仓——用户行为数据中的一些特定术语含义

目录 一、页面信息 用户行为分析 转化率优化 页面优化 个性化体验 营销策略制定 用户流量路径分析 二、动作记录 用户行为分析 转化率优化 个性化推荐 广告定向 A/B 测试 安全审计 三、曝光记录 用户行为分析 内容推荐 广告优化 转化率分析 用户分群…

海豚调度异常处理: 使用 arthas 在内存中删除启动失败的工作流

&#x1f4a1; 本系列文章是 DolphinScheduler 由浅入深的教程&#xff0c;涵盖搭建、二开迭代、核心原理解读、运维和管理等一系列内容。适用于想对 DolphinScheduler了解或想要加深理解的读者。祝开卷有益。大数据学习指南 大家好&#xff0c;我是小陶&#xff0c;DolphinSch…

社群培训的微信语音如何批量导出?分享3种实用方法

社群培训的微信语音如何高效批量导出&#xff1f;三种实用方法分享&#xff1a; 1、利用专业营销工具 为了批量导出微信语音&#xff0c;您可以选择使用专业的营销工具&#xff0c;如一些被市场认可的云端营销平台。这类工具能为您提供便利的转发或导出功能。然而&#xff0c…

明天二战六级

明天二战六级&#xff0c;各位程序员们&#xff0c;加油

八股文系列Spark

为什么Spark 比 MapReduce 更快 DAG相比hadoop的mapreduce在大多数情况下可以减少磁盘I/O次数 mapreduce通常需要将计算的中间结果写入磁盘&#xff0c;然后还要再读取磁盘&#xff0c;从而导致了频繁的磁盘IO。 spark通常不需要将计算的中间结果写入磁盘&#xff0c;只有shuf…

【C++ | const成员】一文了解类的 const数据成员、const成员函数、const对象、mutable 数据成员

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-06-14 2…

新一代大核卷积反超ViT和ConvNet!同参数量下性能、精度、速度完胜

大核卷积网络是CNN的一种变体&#xff0c;也是深度学习领域的一种重要技术&#xff0c;它使用较大的卷积核来处理图像数据&#xff0c;以提高模型对视觉信息的理解和处理能力。 这种类型的网络能够捕捉到更多的空间信息&#xff0c;因为它的大步长和大感受野可以一次性覆盖图像…

运维监控系统

做监控系统集成&#xff0c;持续更新ing 1.Prometheus k8s安装prometheusdocker部署prometheusthanos实现prometheus高可用部署 2.Grafana docker安装grafanagrafana的admin密码忘记了grafana使用mysql远程存储 3.Alertmanager 4.Consul 5.夜莺系统 6.时序数据库 6.1 …

C++语法08 数据类型之间的强制转换

目录 强制类型转换 强制类型转换格式 整型转换成浮点型 整型转换成浮点型其他写法 训练&#xff1a;糖果奖励 糖果奖励参考代码 浮点型转换成整型 浮点型转换成整型其他写法 训练&#xff1a;分离小数 分离小数参考代码 强制类型转换 强制类型转换&#xff0c;就是把…

如何应对生活中的不确定性:仁者安仁,知者利仁。

有较高自尊水平的人&#xff0c;接近于孔子说的&#xff1a;仁者。 ——— 有着稳定的高自尊&#xff0c;无论外在环境如何变化&#xff0c;对其影响都不大&#xff0c;他能够愉快地生活。 相反&#xff1a;一个人处于低自尊状态&#xff0c;就会活得很痛苦&#xff0c;对自己…

Nginx之HTTP模块详解

Nginx是模块化的代码架构&#xff0c;其代码由核心代码与功能模块代码构成。Nginx的主要功能模块是HTTP功能模块&#xff0c;HTTP功能模块在HTTP核心功能的基础上为Nginx对HTTP请求的处理流程提供了扩展功能&#xff0c;这些扩展功能可以让用户很方便地应对访问控制、数据处理、…

基于MCU平台的HMI开发的性能优化与实战(上)

随着汽车座舱智能化的不断演进&#xff0c;车内显示设备的数量显著增加&#xff0c;从传统的仪表盘和中控屏扩展至空调控制、扶手、副驾驶区域以及抬头显示&#xff08;HUD&#xff09;等多样化的显示单元。为了有效支持这些功能单元&#xff0c;同时控制整车成本&#xff0c;越…

java值jsp语法笔记

1 JSP注释 1.1 显示注释 显示注释会出现在生成的HTML文档中&#xff0c;对用户可见。 <!-- 这是一个HTML显示注释 --> 1.2 隐式注释 隐式注释不会出现在生成的HTML文档中&#xff0c;对用户不可见。 <%-- 这是一个JSP隐式注释 --%> 2 JSP脚本元素 2.1 局部…