js排序的基础原理理解
在了解数组排序前,我们先了解下如何交换两个数字的位置
假设我们有这么一个数组
var arr=[1,2,3]
我们想交换1和3两个的位置我们该如何做呢?
最简单的肯定是手动赋值,如下
var arr=[3,2,1]
这样就实现了交换数字的功能,但是这么做显然是不合理的,因为我们是程序化操作,我们肯定需要用程序的思维来解决问题,这时,我们可以引入两个变量把两个数值给存起来,然后实现交换,代码如下:
var arr=[1,2,3]
var a1=arr[0]
var a2=arr[2]
arr[0]=a2
arr[2]=a1
console.log(arr) //(3) [3, 2, 1]
你看,我们已经简单实现了两个数字的交换,但是我们想想能不能用一个变量实现需求呢,其实是可以的
例如:
var arr=[1,2,3]
var a1= arr[0] //我们把arr[0]赋值给变量a1,这样a1就等于了arr[0]
arr[0]=arr[2] //这时候我们把arr[2]的值给arr[0],这里是个关键,因为上一步我们把arr[0]的值已经给了a1了
arr[2]=a1 //这时候我们把a1的值(其实也就是arr[0]的值)给到了arr[2],这样就实现了交换数值的操作
console.log(arr)
有了上面的铺垫,我们再来说下排序
要求:请把下列数组从小到达进行排序,
var arr = [44,3,2,1,11,33]
我们先不开始写代码,我们来说下思路,我们默算的话肯定是把第一项拿出来然后和后面的每一个数字进行比较,我们比较完发现44是最大的,我们肯定是把它放到最后,然后拿出第二项和其他的数字进行比较,这样的话其实我们拿出一个数字是一次循环,然后把单个数字和其他所有数字比较又是一次循环,由此我们得出结论,这里需要两次循环才能够进行比较

var arr = [44,3,2,1,11,33]
for(var i=0;i<arr.length;i++){ //这里是取出数组里面的单个数字
for(var j=i;j<arr.length;j++){ //这里是把上面取出的单个数字和其他数字进行比较,所以有这么一个循环
if(arr[i]>arr[j]){//当发现数字比其他数字要大的时候,下面就开始进行数字交换了,就是上面我们说的数字交换
tem1=arr[i]
arr[i]=arr[j]
arr[j]=tem1
}
}
}
console.log(arr) //[1, 2, 3, 11, 33, 44]
js排序的基础原理理解的更多相关文章
- Vue.js数据响应基础原理
许多前端JavaScript框架(例如Angular,React和Vue)都有自己的数据相应引擎.通过了解相应性及其工作原理,您可以提高开发技能并更有效地使用JavaScript框架.在视频和下面的文 ...
- js 闭包原理理解
问题?什么是js(JavaScript)的闭包原理,有什么作用? 一.定义 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 很显然 ...
- 排序图解:js排序算法实现
之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...
- Hadoop基础原理
Hadoop基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 业内有这么一句话说:云计算可能改变了整个传统IT产业的基础架构,而大数据处理,尤其像Hadoop组件这样的技术出 ...
- 总结下js排序算法和乱序算法
其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...
- 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,
封装常用的js(Base.js)——[01]理解库,获取节点,连缀, youjobit07 2014-10-10 15:32:59 前言: 现如今有太多优秀的开源javascript库, ...
- Java基础之理解Annotation(与@有关,即是注释)
Java基础之理解Annotation 一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata) ...
- Js(javaScript)的闭包原理
问题?什么是js(javaScript)的闭包原理,有什么作用? 一.定义 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 小编 ...
- C#基础原理拾遗——引用类型的值传递和引用传递
C#基础原理拾遗——引用类型的值传递和引用传递 以前写博客不深动,只搭个架子,像做笔记,没有自己的思考,也没什么人来看.这个毛病得改,就从这一篇开始… 最近准备面试,深感基础之重要,奈何我不是计算机科 ...
随机推荐
- Vue3.0工程创建 && setup、ref、reactive函数 && Vue3.0响应式实现原理
1 # 一.创建Vue3.0工程 2 # 1.使用vue-cli创建 3 # 官方文档: https://cli.vuejs.org/zh/guide/creating-a-project.html# ...
- OC高仿iOS网易云音乐AFNetworking+SDWebImage+MJRefresh+MVC+MVVM
效果 因为OC版本大部分截图和Swift版本一样,所以就不再另外截图了. 列文章目录 因为目录比较多,每次更新这里比较麻烦,所以推荐点击到主页,然后查看iOS云音乐专栏. 目简介 这是一个使用OC语言 ...
- AI+医疗:使用神经网络进行医学影像识别分析 ⛵
作者:韩信子@ShowMeAI 计算机视觉实战系列:https://www.showmeai.tech/tutorials/46 行业名企应用系列:https://www.showmeai.tech/ ...
- 多环境配置 - SpringBoot 2.7.2 实战基础
优雅哥 SpringBoot 2.7.2 实战基础 - 06 -多环境配置 在一个项目的开发过程中,通常伴随着多套环境:本地环境 local.开发环境 dev.集成测试环境 test.用户接受测试环境 ...
- Luogu4408 [NOI2003]逃学的小孩 (树的直径)
一边一定是直径,另一边从两端点走取最小值的最大值 #include <iostream> #include <cstdio> #include <cstring> ...
- Jira使用浅谈篇一
本篇参考: https://www.jianshu.com/u/9dd427d9ad94 Salesforce 生命周期管理(二)Agile & Scrum 浅谈 我们都知道 salesfor ...
- Python 工匠:一个关于模块的小故事
前言 模块(Module)是我们用来组织 Python 代码的基本单位.很多功能强大的复杂站点,都由成百上千个独立模块共同组成. 虽然模块有着不可替代的用处,但它有时也会给我们带来麻烦.比如,当你接手 ...
- Java精进-20分钟学会mybatis使用
文字分享 希望现在的你无论有明确具体的目标还是没有,都能重视自己的需求和目标,并且常常回顾,或许可以找一个你习惯的方式写出来,挂在哪里,电脑或日记本都好.当你疲惫或迷茫的时候拿出来看一下,这在情怀领域 ...
- Rsync数据备份工具
Rsync数据备份工具 1.Rsync基本概述 rsync是一款开源的备份工具,可以在不同主机之间进行同步(windows和Linux之间 Mac和 Linux Linux和Linux),可实现全量备 ...
- WinUI(WASDK)项目实践——优雅的开发上位机应用(新)
摘要 这就是一个记录自己进行WinUI项目实践的博客,项目开源地址如下,觉得有帮助的可以去看看,因为项目都开源了,所以保姆级的讲解肯定不如直接看代码来的实在了. 电子脑壳项目地址 为什么叫新 因为之前 ...