javaScript:一分钟看懂数组排序以及冒泡排序(重点)

目录

一.前言

二.数组排序

sort()

    字符串大小的比较原则

    字符编码排序规则

如果使用sort从小到大排列  (重点)

    函数的返回值

    规则:

代码 

案例 

数组打乱

sort相关代码 

三.冒泡排序(重点)

执行过程

代码演示(详细步骤/过程拆解)

案例

练习随机生成 [10,80]的10个整数然后进行冒泡排序


一.前言

        数组排序是将数组中的元素按照一定的规则进行重新排列的过程。排序的目的通常是为了使数组的元素按照升序或降序的方式排列,以便更方便地进行搜索、比较和查找操作。

       冒泡排序是最简单且常见的排序算法之一,它通过重复遍历数组并比较相邻元素的大小来进行排序。在每次遍历中,如果前面的元素大于后面的元素,则交换它们的位置,直到整个数组排序完成。

二.数组排序

sort()

    使用 sort()方法,对数组进行排序(该方法改变的是原数组)

    sort 默认 把 number类型转化为string 类型,然后根据每个字符串的字符编码比较大小。

    字符串大小的比较原则

    几个字符串比较大小,会依次比较每一位置上的字符编码大小,直到比较出大小之后就不再比较,后面的字符直接省略

    字符编码排序规则

    数字 0-9

    A-Z,a-z 依次变大

    A<a

如果使用sort从小到大排列  (重点)

     一般的在进行排序的时候,会给sort()传入一个参数,该参数是一个函数,在函数中设置排序规则,

    该函数必须有返回值

    函数的返回值

    return 参数1 - 参数2: 从小到大排序

    return 参数2 - 参数1: 从大到小排序

    规则:

    当返回一个正数,就会交换两者的位置

    当返回一个负数,不会交换两者的位置

    当返回一个0,会认为这两个数字相等,也不会交换位置

代码 

 let arr4 = [112,231,21,21,1,3,32]arr4.sort(function(a,b){return a-b  //从小到大})console.log(arr4)

 

案例 

数组打乱

//数组打乱let arr5 = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14"]arr5.sort(function(){return Math.random()-0.5})console.log(arr5);

sort相关代码 

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>数组排序</title>
</head>
<body></body>
</html>
<script>/*使用 sort()方法,对数组进行排序该方法改变的是原数组sort 默认 把 number类型转化为string 类型,然后根据每个字符串的字符编码比较大小。字符串大小的比较原则几个字符串比较大小,会依次比较每一位置上的字符编码大小,直到比较出大小之后就不再比较后面的字符直接省略字符编码排序规则数字 0-9A-Z,a-z 依次变大 A<a*/let arr1 = [1,4,6,3,2,10]arr1.sort();console.log(arr1);let arr2 = ['e','ab','ac','d']arr2.sort();console.log(arr2);let arr3 = ['刘备','关羽','曹操','张飞']arr3.sort();console.log(arr3);/*一般的在进行排序的时候,会给sort()传入一个参数,该参数是一个函数,在函数中设置排序规则,该函数必须有返回值函数的返回值return 参数1 - 参数2: 从小到大排序return 参数2 - 参数1: 从大到小排序规则:当返回一个正数,就会交换两者的位置当返回一个负数,不会交换两者的位置当返回一个0,会认为这两个数字相等,也不会交换位置*/let arr4 = [112,231,21,21,1,3,32]arr4.sort(function(a,b){return a-b  //从小到大})console.log(arr4)//数组打乱let arr5 = ["1","2","3","4","5","6","7","8","9","10","11","12","13","14"]arr5.sort(function(){return Math.random()-0.5})console.log(arr5);
</script>

三.冒泡排序(重点)

执行过程

  1. 从数组的第一个元素开始,依次比较相邻的两个元素。
  2. 如果前面的元素比后面的元素大(或小,取决于排序顺序),则交换这两个元素的位置。
  3. 继续向后遍历数组,重复1和2步骤,直到遍历到倒数第二个元素。
  4. 重复以上步骤的过程,每次遍历都使得最大(或最小)的元素“浮”到上一轮排序中最后一个未排序的位置。
  5. 重复上述步骤,直到全部元素排序完成。

代码演示(详细步骤/过程拆解)

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>冒泡排序</title>
</head>
<body></body>
</html>
<script>let arr = [3,5,4,2,1]//第一趟,比较4次for (let i = 0; i < 4; i++) {//比较两个相邻的大小,如果i位置的值 大于 i+1位置是值,则交换数据if(arr[i]>arr[i+1]){let temp = arr[i]arr[i] = arr[i+1]arr[i+1] = temp}}console.log(arr);  //[3, 4, 2, 1, 5]//第二趟比较三次for (let i = 0; i < 3; i++) {if(arr[i]>arr[i+1]){let temp = arr[i]arr[i] = arr[i+1]arr[i+1] = temp}}console.log(arr); //[3, 2, 1, 4, 5]//第三趟比较两次for (let i = 0; i < 2; i++) {if(arr[i]>arr[i+1]){let temp = arr[i]arr[i] = arr[i+1]arr[i+1] = temp}}console.log(arr);  //[2, 1, 3, 4, 5]//第四趟  ,比较一次for (let i = 0; i < 2; i++) {if(arr[i]>arr[i+1]){let temp = arr[i]arr[i] = arr[i+1]arr[i+1] = temp}}console.log(arr); //1, 2, 3, 4, 5]/*比较的数组,每一次比较的趟数,他和对应比较的次数关系是一共比较的趟数 arr.lenght-1每一轮比较的的次数,是arr.lenght  - 当前的趟数(轮数)*///外层控制比较的轮数for (let i = 1; i < arr.length; i++) {//内层控制比较的次数for (let j = 0; j < arr.length-i; j++) {if(arr[j]>arr[j+1]){    //(s[j]<s[j+1]) 从大到小let temp = arr[j]arr[j] = arr[j+1]arr[j+1] = temp}}}</script>

案例

练习随机生成 [10,80]的10个整数然后进行冒泡排序

//练习随机生成 [10,80]的10个整数然后进行冒泡排序let s = []for (let i = 0; i < 10; i++) {let sj = Math.floor(Math.random()*71+10)s[i] = sj}console.log(s)for (let i = 1; i < s.length; i++) {//内层控制比较的次数for (let j = 0; j < s.length-i; j++) {if(s[j]>s[j+1]){    //(s[j]<s[j+1]) 从大到小let temp = s[j]s[j] =s[j+1]s[j+1] = temp} }  }console.log(s);console.log('最小值是'+s[0]);console.log('最大值是'+s[s.length-1]);

 

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

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

相关文章

【RocketMQ】NameServer总结

NameServer是一个注册中心&#xff0c;提供服务注册和服务发现的功能。NameServer可以集群部署&#xff0c;集群中每个节点都是对等的关系&#xff08;没有像ZooKeeper那样在集群中选举出一个Master节点&#xff09;&#xff0c;节点之间互不通信。 服务注册 Broker启动的时候会…

【通俗易懂】如何使用GitHub上传文件,如何用git在github上传文件

目录 创建 GitHub 仓库 使用 Git 进行操作 步骤 1&#xff1a;初始化本地仓库 步骤 2&#xff1a;切换默认分支 步骤 3&#xff1a;连接到远程仓库 步骤 4&#xff1a;获取远程更改 步骤 5&#xff1a;添加文件到暂存区 步骤 6&#xff1a;提交更改 步骤 7&#xff1a…

RenderDoc 导出Cubemap到UE

找到使用了Cubemap的模型,再Output里会显示该模型使用的所有贴图 ,选中Cubemap导出 选择导出格式为HDR 导出的Cubemap是竖着的,需要再PS里逆时针旋转&#xff19;&#xff10;度 还有&#xff0c;导出的的Cubemap方向是错的,需要把3,4 跟1,2 对换,6旋转180度 UE 文档里的方向参…

Spring Boot @Validated 验证注解的使用

1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency> 2、使用 2.1、非对象参数 参数如果是非对象格式&#xff0c;需要在controller类上面添…

JVM——HotSpot的算法细节实现

一、根节点枚举 固定可作为GC Roots的节点主要在全局性的引用&#xff08;如常量或类静态属性&#xff09;与执行上下文&#xff08;如栈帧中的本地变量表&#xff09;中&#xff0c;尽管目标明确&#xff0c;但查找要做到高效很难。现在java应用越来越庞大&#xff0c;光方法区…

Code interpreter生成无聊的APP:病理图像切割和提取

一、写在前面 机器学习100步不够分配了&#xff0c;所以开个新专栏&#xff0c;就叫做《Code interpreter生成无聊的APP》&#xff0c;旨在探索GPT-4官方插件Code interpreter的使用心路历程。 主要灵感来源&#xff1a;听户主说&#xff0c;她们在做病理组学图像标注和分割的…

如何用Apipost实现sign签名?

我们平常对外的接口都会用到sign签名&#xff0c;对不同的用户提供不同的apikey ,这样可以提高接口请求的安全性&#xff0c;避免被人抓包后乱请求。 如何用Apipost实现sign签名&#xff1f; 可以在Apipost中通过预执行脚本调用内置的JS库去实现预执行脚本是在发送请求之前自…

Wordcloud | 风中有朵雨做的‘词云‘哦!~

1写在前面 今天可算把key搞好了&#xff0c;不得不说&#x1f3e5;里手握生杀大权的人&#xff0c;都在自己的能力范围内尽可能的难为你。&#x1f602; 我等小大夫也是很无奈&#xff0c;毕竟奔波霸、霸波奔是要去抓唐僧的。 &#x1f910; 好吧&#xff0c;今天是词云&#x…

【C++精华铺】8.C++模板初阶

目录 1. 泛型编程 2. 函数模板 2.1 函数模板的概念及格式 2.2 函数模板的原理 2.3 模板的实例化 2.4 模板参数的匹配原则 3. 类模板 3.1 类模板格式 3.2 类模板的实例化 1. 泛型编程 什么是泛型编程&#xff1f;泛型编程是避免使用某种具体类型而去使用某种通用类型来进行…

带你了解—使用内网穿透,公网远程访问本地硬盘文件

文章目录 前言1. 下载cpolar和Everything软件3. 设定http服务器端口4. 进入cpolar的设置5. 生成公网连到本地内网穿透数据隧道 总结 前言 随着云概念的流行&#xff0c;不少企业采用云存储技术来保存办公文件&#xff0c;同时&#xff0c;很多个人用户也感受到云存储带来的便利…

学习ts(四)联合类型、交叉类型、类型断言

联合类型 使用联合类型定义属性和方法&#xff0c;只要符合其中一种即可 let myPhone: string | number 010-7788 // let myPhone1: string | number true 因为没有包含boolean值 会报错const fn (something: number | boolean): boolean > {return !!something }con…

【CSS动画01--登录】

CSS动画01--登录 介绍代码HTMLCSSJS 介绍 当鼠标不同方向的划过时展示不同效果的登录&#xff0c;以上是一个简单的图片展示 代码 HTML <!DOCTYPE html> <html> <head><meta http-equiv"content-type" content"text/html; charsetutf-8&…

生物笔记——暑期学习笔记(四)

生物笔记——暑期学习笔记&#xff08;四&#xff09; 文章目录 前言一、R篇1. unname()2. duplicated()3. 数据提取4. 分组 二、生信篇1. 文本处理常用命令2. 命令输出1. 重定向2. 多命令执行 3. 文本工具4. 本地hmm鉴定1. hmmer软件安装2. 文件准备3. 基于hmm的鉴定 总结 前言…

【制作npm包5】npm包制作完整教程,我的第一个npm包

制作npm包目录 本文是系列文章&#xff0c; 作者一个橙子pro&#xff0c;本系列文章大纲如下。转载或者商业修改必须注明文章出处 一、申请npm账号、个人包和组织包区别 二、了解 package.json 相关配置 三、 了解 tsconfig.json 相关配置 四、 api-extractor 学习 五、npm包…

MySQL的配置文件my.cnf与my.ini

一、my.cnf与my.ini win系统&#xff0c;MySQL配置文件为my.ini 其他系统&#xff08;Ubuntu、CentOS、macOS)MySQL配置文件为my.cnf 二、my.cnf与my.ini的路径 2.1 默认路径 MySQL 的配置文件 my.cnf 可能位于多个位置&#xff0c;具体取决于安装方式和操作系统。以下是一…

2023年国赛数学建模思路 - 案例:最短时间生产计划安排

文章目录 0 赛题思路1 模型描述2 实例2.1 问题描述2.2 数学模型2.2.1 模型流程2.2.2 符号约定2.2.3 求解模型 2.3 相关代码2.4 模型求解结果 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 最短时…

Kotlin开发笔记:使用委托进行拓展

Kotlin开发笔记&#xff1a;使用委托进行拓展 导言 在OO语言(面向对象)中&#xff0c;我们经常会用到委托或者代理的思想。委托和代理在乍一看很相似&#xff0c;其实其各有各的侧重点&#xff0c;这里我引用ChatGpt的回答&#xff1a; 委托&#xff08;Delegation&#xff09…

在C中使用Socket实现多线程异步TCP消息发送

目录 基础知识开始实现主要函数说明结束语 在本篇文章中&#xff0c;我们会探讨如何在C语言中使用socket来实现多线程&#xff0c;异步发送TCP消息的系统。虽然C标准库并没有原生支持异步和多线程编程&#xff0c;但是我们可以结合使用POSIX线程&#xff08;pthread&#xff09…

Java解决四大查找(一)

Java解决四大查找 一.线性查找1.1 题目1.2 思路分析1.3 代码演示 二.二分查找(双指针法)2.1 题目2.2 思路分析(图解加文字)2.3 代码演示 一.线性查找 1.1 题目 在数组{1&#xff0c;8&#xff0c;1024&#xff0c;521&#xff0c;1889}中查找数字8&#xff0c;如果有&#xff…

地址解析协议-ARP

ARP协议 无论网络层使用何种协议&#xff0c;在实际网络的链路上传输数据帧时&#xff0c;最终必须使用硬件地址 地址解析协议&#xff08;Address Resolution Protocol&#xff0c;ARP&#xff09;&#xff1a;完成IP地址到MAC地址的映射&#xff0c;每个主机都有一个ARP高速缓…