在了解数组排序前,我们先了解下如何交换两个数字的位置

假设我们有这么一个数组

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排序的基础原理理解的更多相关文章

  1. Vue.js数据响应基础原理

    许多前端JavaScript框架(例如Angular,React和Vue)都有自己的数据相应引擎.通过了解相应性及其工作原理,您可以提高开发技能并更有效地使用JavaScript框架.在视频和下面的文 ...

  2. js 闭包原理理解

    问题?什么是js(JavaScript)的闭包原理,有什么作用? 一.定义 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 很显然 ...

  3. 排序图解:js排序算法实现

    之前写过js实现数组去重, 今天继续研究数组: 排序算法实现. 排序是数据结构主要内容,并不限于语言主要在于思想:大学曾经用C语言研究过一段时间的排序实现, 这段时间有空用JS再将排序知识点熟悉一遍. ...

  4. Hadoop基础原理

    Hadoop基础原理 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 业内有这么一句话说:云计算可能改变了整个传统IT产业的基础架构,而大数据处理,尤其像Hadoop组件这样的技术出 ...

  5. 总结下js排序算法和乱序算法

    其实本人最怕的就是算法,大学算法课就感觉老师在讲天书,而且对于前端来说,算法在实际的应用中实在是很有限.毕竟算法要依靠大量的数据为基础才能发挥出算法的效率,就浏览器那性能,......是吧,退一万步说 ...

  6. 封装常用的js(Base.js)——【01】理解库,获取节点,连缀,

    封装常用的js(Base.js)——[01]理解库,获取节点,连缀,  youjobit07 2014-10-10 15:32:59 前言:       现如今有太多优秀的开源javascript库, ...

  7. Java基础之理解Annotation(与@有关,即是注释)

    Java基础之理解Annotation 一.概念 Annontation是Java5开始引入的新特征.中文名称一般叫注解.它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata) ...

  8. Js(javaScript)的闭包原理

    问题?什么是js(javaScript)的闭包原理,有什么作用? 一.定义 官方解释:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.  小编 ...

  9. C#基础原理拾遗——引用类型的值传递和引用传递

    C#基础原理拾遗——引用类型的值传递和引用传递 以前写博客不深动,只搭个架子,像做笔记,没有自己的思考,也没什么人来看.这个毛病得改,就从这一篇开始… 最近准备面试,深感基础之重要,奈何我不是计算机科 ...

随机推荐

  1. Nginx api接口调用配置

    1 # Nginx api接口调用配置 2 3 # 什么是跨域同源? 4 # 同源策略:协议(http.https.wss--)+域名+端口=一个完整的网站 5 # 跨域:当前所在的网站post(ge ...

  2. CentOS Docker安装 && docker 基础指令

    1 # 直接从官网下载docker的安装命令包(docker已经很贴心将安装shell脚本帮我们准备好了) 2 curl -fsSL get.docker.com -o get-docker.sh 3 ...

  3. Mybatis 缓存原理

    Mybatis 缓存原理 本文来自拉钩 java 高薪训练营,如果文章写的不好,看不懂可以找我要课程视频,不收费. 只愿在编程道路上,寻求志同道合的码友.v:15774135883 1 Mybatis ...

  4. 技术分享 | 在GreatDB分布式部署模式中使用Chaos Mesh做混沌测试

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 1. 需求背景与万里安全数据库软件GreatDB分布式部署模式介绍 1.1 需求背景 混沌测试是检测分布式系统不确定性.建 ...

  5. LuoguP5322 [BJOI2019]排兵布阵(DP)

    城为物,人为容,价值?排序后,一切都明了 #include <iostream> #include <cstdio> #include <cstring> #inc ...

  6. PerfView专题 (第八篇):洞察 C# 内存泄漏之寻找静态变量名和GC模式

    一:背景 这篇我们来聊一下 PerfView 在协助 WinDbg 分析 Dump 过程中的两个超实用技巧,可能会帮助我们快速定位最后的问题,主要有如下两块: 洞察内存泄漏中的静态大集合变量名. 验证 ...

  7. 一个监控工具monit

    最近看了一个问题,monit监控在读取配置文件之后,访问的文件是残留在容器中的,导致认为服务异常,其实一开始容器启动,并没有对应的服务. [root@10-36-235-119.fin-wealth- ...

  8. 如何结合整洁架构和MVP模式提升前端开发体验 - 整体架构篇

    本文不详细介绍什么是整洁架构以及 MVP 模式,自行查看文章结尾相关链接文章. 整洁架构粗略介绍 下图为整洁架构最原始的结构图: Entities/Models:实体层,官方说法就是封装了企业里最通用 ...

  9. cobaltstrike进行局域网远控

    用cobaltstrike进行局域网远控 cobalt strike(简称CS)是一款团队作战渗透测试神器,分为客户端及服务端,一个服务端可以对应多个客户端,一个客户端可以连接多个服务端. 实验原理: ...

  10. 使用『jQuery』『原生js』制作一个选项卡盒子 —— { }

    效果 HTML 部分 <body> <div id="main-box"> <div id="left-nav"></ ...