js冒泡排序详解

因为过一阵要面试 大厂都比较注重算法题 所以今天练习一个简单的冒泡算法

冒泡算法的基本原理为:

    1.比较相邻的两个数 如果第一个数比第二个数大 那么就交换位置

    2.那么每次比较一轮之后 最大的数将会到最右侧

    3.所以综上方法对于长度为n的数组需要比较n-1次之后才能使数组排序完毕(为什么是n-1 因为最后就剩1个 他没的比了 他就是最小的)

    4.那么每批次比的时候因为之前已经把最大的挑出来放到左边已经固定 所以每批次比就少1次 如果比了n批就少n次

由此我们可以写出代码

function maopao (arr) {
        for(let k=0;k<arr.length-1;k++)     //之前说过了总共要比 数组长度-1 次
               for(let i=0;i<arr.length-k-1;i++)//先减去之前已经排好的k个 再两两比较
                  {
                         let swap=0
                         if(arr[i]>arr[i+1]){     //两个数比较大的放右边(两个杯子换水 要引入中间杯子swap)
                             swap=arr[i+1];
                             arr[i+1]=arr[i];
                            arr[i]=swap;
                       }
                  }          
            return arr
}

  

    

原文地址:https://www.cnblogs.com/yuzeyang/p/9256396.html

时间: 2024-11-05 20:29:48

js冒泡排序详解的相关文章

开胃小菜——impress.js代码详解

README 友情提醒,下面有大量代码,由于网页上代码显示都是同一个颜色,所以推荐大家复制到自己的代码编辑器中看. 今天闲来无事,研究了一番impress.js的源码.由于之前研究过jQuery,看impress.js并没有遇到太大的阻碍,读代码用了一个小时,写这篇文章用了近三个小时,果然写文章比读代码费劲多了. 个人感觉impress.js的代码量(算上注释一共不到1000行)和难度(没有jQuery的各种black magic= =)都非常适合新手学习,所以写一个总结,帮助大家理解源码. 考

Bootstrap transition.js 插件详解

Bootstrap transition.js 插件详解 时间 2015-01-27 12:12:00 博客园-原创精华区 原文  http://www.cnblogs.com/xyzhanjiang/p/4252513.html 主题 Bootstrap JavaScript Bootstrap 自带的 JavaScript 插件的动画效果几乎都是使用 CSS 过渡实现的,而其中的 transition.js 就是为了判断当前使用的浏览器是否支持 CSS 过渡.下面先来简单了解下 CSS 过渡

Node.js npm 详解

Node.js npm 详解 一.npm简介 安装npm请阅读前辈的文章,很详细的介绍. npm的全称:Node Package Manager. (1)通俗的理解 其实从字面意思就可以理解这个产品有什么作用翻译为"Node包管理器".对,就是Node的包的一个管理工具,目前我尝试的有 下载并安装包(npm install [pkg]) 升级安装包(npm update [pkg]) 卸载安装包(npm uninstall/rm [pkg]),可以指定卸载包的版本号 - 其实这些命令很

require(&#39;./expample.js).default详解

最近总碰到类似于 var a = require('./expample.js).default 这样的代码,感觉很奇葩,总结一波. 为什么会出现这个问题? import 是静态编译的,而 require 可以动态加载,也就是说你可以通过判断条件来决定什么时候去 require ,而 import 则不行,所以有时候我们会面临需要通过require 去导入一个es6模块(比如react-hot-loader官方demo :P) 当然,这只是场景之一. 前置知识 ES6 Module常用语法.譬如

第三天:JS事件详解-事件流

学习来源: F:\新建文件夹 (2)\HTML5开发\HTML5开发\04.JavaScript基础\6.JavaScript事件详解 学习内容:  1)基础概念 2)举例说明: 代码如上,如果用事件冒泡的方式来解释,先点击到接受时间的按钮,然后是div,因为按钮包含在div中,然后是html5然后到文档 事件的捕获,首先是文档接收, 然后是html 然后是div 最后是最具体的元素button来接收 学后感: 只是记住了它的意思,但是并没有明白有什么实际意义

JS正则表达式详解 转

开篇,还是得说说 ^    和    $    他们是分别用来匹配字符串的开始和结束,以下分别举例说明 "^The": 开头一定要有"The"字符串; "of despair$":    结尾一定要有"of despair" 的字符串; 那么, "^abc$": 就是要求以abc开头和以abc结尾的字符串,实际上是只有abc匹配 "notice": 匹配包含notice的字符串 你可以看

js对象详解

为什么要有对象 function printPerson(name, age, sex....) {}// 函数的参数如果特别多的话,可以使用对象简化function printPerson(person) {  console.log(person.name);  ……} 什么是对象 现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征.举例: 一部车,一个手机车是一类事物,门口停的那辆车才是对象 特征:红色.四个轮子 行为:驾驶.刹车 JavaScript中的对象 J

《JavaScript高级程序设计》学习笔记(2)--JS运算符详解

欢迎关注本人的微信公众号"前端小填填",专注前端技术的基础和项目开发的学习. 思维导图 前面对JS的运算符的操作很多细节的东西没有提及,今天给大家分享一张网上找的思维导图,对这一部分做一个详细的补充,小编觉得总结得还算很到位的:

冒泡排序详解

冒泡排序可以说是排序中一个十分重要的内容,很多时候都会遇到,比如面试,考试等.下面就来写一写冒泡排序,也可以加深一下自己的理解. 冒泡排序原理,依次比较相邻的两个元素,把较大的元素移至后端:每趟排序找出较大的值放在后端. 给定一个数组,例如[2,8,4,6,1]; 第一趟排序:将8移至后端 第一次排序:[2,8,4,6,1]; //比较2和8,位置不变 第二次排序:[2,4,8,6,1]; //比较8和4,将8移至4的后面 第三次排序:[2,4,6,8,1]; //比较8和6,将8移至6的后面