第二周晨考自测(2.0)

1.冒泡排序

冒泡排序是数组解构中的常见排序算法之一。规则如下:先遍历数组,让相邻的两个数据进行比较,如果前一个比后一个大,那么就把这两个数据交换位置,经过一轮遍历之后,最大的那个数字就排在数组最后的索引位置,然后进行第二次遍历,按照相同的规则,最终将第二大的数字排在倒数第二的索引位置,同理,经过多次排序,最终将数组按照从小到大的顺序进行展示(认为规定是正向冒泡还是反向冒泡,反向冒泡最终可以从大往小的顺序排序)

代码实现:

for(var j=0;j<arr.length; j++){for(var i=0;i<arr.length;i++){if(arr[i]>arr[i+1]){var tmp=arr[i]arr[i]=arr[i+1]arr[i+1]=tmp
}}}

代码优化思路:

当进行第一次遍历时,假设数组的长度为9,那么排列8次就可以得到最大值,所以在外层的循环可以优化为arr.length-1

在第一次遍历结束后,已经找到了最大值并排列在最后的位置,那么我们在第二次循环遍历时,就不需要对比最后一个的最大值,同理,第三次不需要对比最后两个已经拍好的最大值等等。就会呈现一个规律:内循环的遍历次数是外循环遍历次数-1,比如外层为j,那么内层就减少j-1.故内层循环中的结束条件可以优化为:arr.length-1-j

故优化后的代码:

for(var j=0;j<arr.length-1; j++){for(var i=0;i<arr.length-1-j;i++){if(arr[i]>arr[i+1]){var tmp=arr[i]arr[i]=arr[i+1]arr[i+1]=tmp
}}}

2.选择排序

3.数组常用方法

(1)arr.push()  从数组的末尾添加数据

(2)arr.pop()从数组的末尾删除数据

(3)arr.unshift()从数组的头部添加数据

(4)arr.shift()从数组的头部删除数据

(5)arr.splice(开始索引,删除个数,替换的数据1,替换的数据2...) 删除并替换数组中的数据

(6)arr.slice(开始索引,结束索引)包前不包后(包括开始索引,不包括结束索引),截取数组

(7)arr.reverse()反转数组

(8)arr.concat()拼接数组

(9)arr.join()将数组转换成字符串,并用括号中的内容进行拼接

(10)arr.indexOf(数据,开始索引)查找数组,从指定索引开始   (正序)

(11)arr.lastIndexOf(数据,开始索引)查找数组,从指定索引开始(逆序)

(12)arr.sort()排序数组,默认以ASCII编码的方式进行排序

(13)arr.sort(a,b){return a-b}以递增的方式进行排序

(14)arr.sort(a,b){return b-a}以递减的方式进行排序

(15)arr.forEach(function(item,index,arr){})遍历数组

item:数组中的每一项

index:数组中的每一项的索引

arr:原数组

(16)arr.map(function(item,index,arr){return }) 映射数组,以return的形式

(17)arr.filter(function(item,index,arr){return})过滤数组,将满足条件的数据以一个新数组的形式返回

(18)arr.some(function(item,index,arr){return})过滤数组,返回结果为布尔值,只要一个条件为真则为真,全部为假则为假

(19)arr.every(function(item,index,arr){return})过滤数组,返回结果为布尔值,只要一个条件为假则为假,全部为真则为真

(20)arr.find(function(item,index,arr){return})过滤数组,将满足条件的第一个数据返回

(21)arr.findIndex(function(item,index,arr){return})过滤数组,将满足条件的第一个数据的索引返回

(22)arr.reduce(function(prev,item,index,arr){return},初始值)累加数组

4.数组去重

(1)排序让相同的元素挨着,通过遍历删除相同的

arr.sort(function(a,b){ return a-b})             for(var i=0;i<arr.length-1;i++){//判断当前的元素和后面的元素是否相等 如果相等就删除掉  if(arr[i]===arr[i+1]){arr.splice(i,1) //防止塌陷  i--}}

(2)利用双重for循环来实现

//循环遍历原数组   for(var i=0; i<arr.length-1; i++){//再次循环 让前面的元素和后面的元素再次比较 for(var j=i+1; j<arr.length-1; j++){ if(arr[i]===arr[j]){//如果后面还有相同的数字就删除掉   arr.splice(j,1)  //防止坍塌  j--}}}

(3)接祖一个新数组以及数组的indexOf方法来实现

var newArr=[] for(var i=0;i<arr.length-1;i++){//判断新数组有没有原数组中的数据,如果没有就添加进去if(newArr.indexOf(arr[i])===-1){//添加元素到新数组中 newArr.push(arr[i])}}

(4)借助forEach来实现

arr.forEach(function(item){if (newArr.indexOf(item===-1){newArr.push(item)})})

(5)直接判断元素数组,检测当前元素后面有没有相同的元素,有就删除掉

for (var i=0;i<arr.length; i++){//拿到后面元素的索引  var index=arr.indexOf(arr[i],i+1)  //判断后面的元素是不是还有相同的  if(index! == -1){//说明后面还有  arr.splice(i, 1)  //放置塌陷  i--}}

(6)借助一个对象的特性来实现,因为对象里面的键名不能重复

for(var i=0; i<arr.length; i++){ var item=arr[i] // item 就是数组内的每一个数据   //把item当做key添加到对象内   obj[item]='随便数据'}  //准备一个新的数组  var newArr=[]  //循环遍历对象  for( var k in obj){// 把每一个 k添加到 newArr里面 newArr.push(k-0)}

(7)借助Set构造函数

// Set是ES6里面的一个数据类型  //功能:Set对象是值的集合,你可以按照插入的顺序迭代它的元素。  Set中的元素只会出现一次,即Set中的元素是唯一的   var arr1=new Set(arr)   //返回的是个对象的结构    //把对象转化成数组 var arr2=Array.from(arr1)   

(8)通过ES6的扩展运算符来实现

var arr1=new Set(arr)  //通过ES6的一个新语法扩展运算符来实现  var result=[...arr1]  

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

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

相关文章

UML图绘制 -- 类图

1.类图的画法 类 整体是个矩形&#xff0c;第一层类名&#xff0c;第二层属性&#xff0c;第三层方法。 &#xff1a;public- : private# : protected空格: 默认的default 对应的类写法。 public class Student {public String name;public Integer age;protected I…

机器学习知识点总结:什么是GBDT(梯度提升树)

什么是GBDT(梯度提升树) 虽然GBDT同样由许多决策树组成&#xff0c;但它与随机森林由许多不同。 其中之一是GBDT中的树都是回归树&#xff0c;树有分类有回归&#xff0c;区分它们的方法很简单。将苹果单纯分为好与坏的是分类树&#xff0c;如果能为苹果的好坏程度打个分&…

pycharm上传项目到github,版本管理

前提&#xff1a;下载git 设置Git路径 登录Github 此时自动打开浏览器&#xff0c;并打开连接页面&#xff0c;点击 Authorize GitHub。登录&#xff1a; 创建本地仓库 提交到Github 填写初始提交相关信息 origin&#xff0c;它们只是远程服务器的一个别名&#xff0c;否则你就…

小程序前台Boot后台校园卡资金管理系统java web学校进销存食堂挂失jsp源代码

本项目为前几天收费帮学妹做的一个项目&#xff0c;Java EE JSP项目&#xff0c;在工作环境中基本使用不到&#xff0c;但是很多学校把这个当作编程入门的项目来做&#xff0c;故分享出本项目供初学者参考。 一、项目描述 小程序前台Boot后台校园卡资金管理系统 系统有2权限&…

React Native expo项目修改应用程序名称

https://expo.dev/accounts/xutongbao/projects npm install --global eas-cli && \eas init --id e32cf2c0-da5b-4a65-814a-4958d58f0ca7 eas init --id e32cf2c0-da5b-4a65-814a-4958d58f0ca7 app.config.js: export default {name: 学习,slug: learn-gpt,owner: x…

虹科方案 | 汽车总线协议转换解决方案

虹科提供的汽车总线协议转换解决方案&#xff0c;有效地解决了车载ECU、总线测试工具等&#xff0c;因通信协议不兼容而无法通信的问题&#xff0c;并在优化测试台架、模拟总线信号等方向有显著的成效。 文章目录 前言一、应用场景1&#xff1a;跨协议通信测试BMS&#xff08;电…

前端面试:【this】解锁上下文之谜

嗨&#xff0c;亲爱的代码探险家&#xff01;在JavaScript的冒险旅程中&#xff0c;有一个神秘的关键字&#xff0c;那就是this。this就像是一面魔镜&#xff0c;它的含义会根据代码的上下文而变化&#xff0c;有时令人困惑&#xff0c;但掌握了它&#xff0c;你就能更好地控制…

【C++】友元函数、友元类、内部类

文章目录 一、友元函数二、友元类三、内部类四、小结 一、友元函数 友元函数是定义在类外的普通函数&#xff0c;但是可以访问类的所有成员&#xff0c;包括私有和保护成员。 它不是类的成员函数&#xff0c;但是要在类里声明。 例子&#xff1a; class A {// 友元函数可以在…

Kotlin 基础教程二

constructor 构造器一般情况下可以简化为主构造器 即: class A constructor(参数) : 父类 (参数) 也可以在构造器上直接声明属性constructor ( var name) 这样可以全局访问 init { } 将和成员变量一起初始化 thread {} ktx 默认创建一个线程 susped 挂起 data class 可以简…

python爬虫8:bs4库

python爬虫8&#xff1a;bs4库 前言 ​ python实现网络爬虫非常简单&#xff0c;只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点&#xff0c;方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论&#xff0c;并不会对网站产生不好…

webSocket 聊天室 node.js 版

全局安装vue脚手架 npm install vue/cli -g 创建 vue3 ts 脚手架 vue create vue3-chatroom 后端代码 src 同级目录下建 server: const express require(express); const app express(); const http require(http); const server http.createServer(app);const io req…

数学建模的概念和学习方法(什么是数学建模)

一、初步认识数学建模 数学建模是将数学方法和技巧应用于实际问题的过程。它涉及使用数学模型来描述和分析现实世界中的现象、系统或过程&#xff0c;并通过数学分析和计算来预测、优化或解决问题。数学建模可以应用于各种领域&#xff0c;包括自然科学、工程、经济学、环境科学…

centos7的flink安装过程

安装步骤 下载flink的tar.gz包修改flink的conf配置下载需要的lib包 具体代码&#xff08;以flink1.15为例&#xff09; # 下载flink的tar.gz包 wget https://archive.apache.org/dist/flink/flink-1.15.4/flink-1.15.4-bin-scala_2.12.tgz tar -zxvf flink-1.15.4-bin-scala…

rust入门系列之Rust介绍及开发环境搭建

Rust教程 Rust基本介绍 网站: https://www.rust-lang.org/ rust是什么 开发rust语言的初衷是&#xff1a; 在软件发展速度跟不上硬件发展速度&#xff0c;无法在语言层面充分的利用硬件多核cpu不断提升的性能和 在系统界别软件开发上&#xff0c;C出生比较早&#xff0c;内…

vue3.0 element-plus 不同版本 el-popover 循环优化

表格内循环el-popover 渲染以后的页面&#xff0c;数据量很大的时候页面会卡&#xff0c;生成的代码&#xff1a; 解决思路&#xff1a;将el-popover提出来&#xff0c;不参与循环&#xff0c;让el-popover只渲染一次 1、以1.1.0-beta.24版为例&#xff08;低版本&#xff09;…

从关键新闻和最新技术看AI行业发展(2023.7.10-7.23第三期) |【WeThinkIn老实人报】

Rocky Ding 公众号&#xff1a;WeThinkIn 写在前面 【WeThinkIn老实人报】本栏目旨在整理&挖掘AI行业的关键新闻和最新技术&#xff0c;同时Rocky会对这些关键信息进行解读&#xff0c;力求让读者们能从容跟随AI科技潮流。也欢迎大家提出宝贵的优化建议&#xff0c;一起交流…

保险龙头科技进化论:太保的六年

如果从2013年中国首家互联网保险公司——众安在线的成立算起&#xff0c;保险科技在我国的发展已走进第十个年头。十年以来&#xff0c;在政策指引、技术发展和金融机构数字化转型的大背景下&#xff0c;科技赋能保险业高质量发展转型已成为行业共识。 大数据、云计算、人工智…

Linux笔试题(4)

67、在局域网络内的某台主机用ping命令测试网络连接时发现网络内部的主机都可以连同,而不能与公网连通,问题可能是__C_ A.主机ip设置有误 B.没有设置连接局域网的网关 C.局域网的网关或主机的网关设置有误 D.局域网DNS服务器设置有误 解析&#xff1a;在局域网络内的某台主…

Nginx 配置https以及wss

一、申请https证书 可以在阿里云申请免费ssl证书&#xff0c;一年更换一次 二、Nginx配置ssl upstream tomcat_web{server 127.0.0.1:8080; }server {listen 443 ssl;server_name www.xxx.com;## 配置日志文件access_log /var/log/nginx/web/xxx-ssl-access.log main;er…

Python爬虫的scrapy的学习(学习于b站尚硅谷)

目录 一、scrapy  1. scrapy的安装  &#xff08;1&#xff09;什么是scrapy  &#xff08;2&#xff09;scrapy的安装 2. scrapy的基本使用  &#xff08;1&#xff09;scrap的使用步骤  &#xff08;2&#xff09;代码的演示 3. scrapy之58同城项目结构和基本方法&…