冒泡排序原理

我认为本质上其实就是将数组内相邻的两个元素进行比较,然后判断是否交换这两个变量的值,后面的元素依次执行。

我的思路:

  1. 外层循环控制趟数,里层循环控制每一趟的循环次数;
  2. 比较数组内相邻的两个元素,根据相应条件判断是否交换它们两个的值;
  3. 从第一组到最后一组,对每一组相邻的两个元素做同样的工作;每轮循环后,末尾的元素就会是最大或最小的数;
  4. 针对数组内所有的元素重复上述的操作(除了最后一个)直到没有任何一组数字需要比较为止,输出数组。

代码示例:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>冒泡排序</title><script>var arr = [220, 190, 140, 160, 150, 180, 170, 50, 150, 88, 108];for (var i = 0; i < arr.length; i++) { // 外层循环控制趟数for (var j = 0; j < arr.length - i; j++) {  // 里层循环控制每一趟的循环次数if (arr[j] < arr[j + 1]) { // 从大到小 改为 > 则从小到大排序var temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}console.log(arr);</script>
</head>
<body>
</body>
</html>

结果:

案例分析

从 1~30 中选出 5 个能被 2 整除的随机数,并对他们从大到小排序,最后输出一个数组。

方法1:

  1. 定义一个空数组 arr;
  2. 选取 1~30 中能被 2 整除的数加入数组 arr;
  3. 从中随机取 5 个数生成一个新数组 newArr;
  4. 从大到小进行冒泡排序并输出这个数组 newArr。

方法2:

  1. 定义一个空数组 arr;
  2. 从 1~30 中选出能被 2 整除的随机数放入数组 arr;
  3. 当数组长度为 5 时,跳出循环 break;
  4. 从大到小进行冒泡排序并输出数组。

代码1:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test</title><script>var arr = [];var newArr = [];for (var i = 1; i <= 30; i++) {if (i % 2 == 0) {arr.push(i);}for (var k = 0; k < 5; k++) {newArr[k] = arr[Math.floor(Math.random() * arr.length)];}}for (var i = 0; i < newArr.length; i++) {for (var j = 0; j < newArr.length - i; j++) {if (newArr[j] < newArr[j + 1]) { // 从大到小var temp = newArr[j];newArr[j] = newArr[j + 1];newArr[j + 1] = temp;}}}console.log(newArr);</script>
</head>
<body>
</body>
</html>

代码2:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>test</title><script>var arr = [];for (var i = 0; i <= 30; i++) {var a = Math.floor(Math.random() * 30) + 1if (a % 2 == 0) {arr.push(a);}if (arr.length == 5) {break;}}for (var i = 0; i < arr.length; i++) {for (var j = 0; j < arr.length - i; j++) {if (arr[j] < arr[j + 1]) { // 从大到小var temp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = temp;}}}console.log(arr);</script>
</head>
<body>
</body>
</html>

结果:

小结:上述方法只是我所知的思路,事实上肯定不止我写的这两个,而且冒泡排序还可以通过函数方法等来实现,目前我还不会,有兴趣的可以自行研究。

下面是我看到的一篇对冒泡排序分析很详细的博客:

冒泡排序(超详细)_@烟雨倾城ゝ的博客-CSDN博客_冒泡排序

JavaScript——冒泡排序相关推荐

  1. 前端开发面试题—JavaScript冒泡排序

    今天分享一下我遇到的一个关于JavaScript冒泡排序的面试题,题目是笔试题目,要求用JavaScript手写一个冒泡排序,倒序输出新的数组.其实难度不大,就是太久没手写代码在纸上了,感觉有点奇怪( ...

  2. javascript冒泡排序详解---kalrry

    javascript冒泡排序详解---kalrry 一.什么是冒泡排序 二.举个例子 一.什么是冒泡排序 冒泡排序,Bubble Sort,通过依次来比较相邻两个元素的大小,在每一次的比较的过程中,两 ...

  3. JavaScript冒泡排序

    定义 冒泡排序(英语:Bubble Sort)又称为泡式排序,是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来.走访数列的工作是重复地进行直到没有 ...

  4. JavaScript冒泡排序(升序排列)

    冒泡排序算法的原理如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 针对所有的元素重复 ...

  5. 【算法】JavaScript冒泡排序

    数字类型: //冒泡排序const arr = [2, 4, 5, 6, 1, 3]//外层循环长度减一次for (let i = 0; i <= arr.length - 1; i++) {/ ...

  6. JS 排序算法 (javascript ) 冒泡排序 比较 快速排序

    1.冒泡排序 1.1 解析 let arr = [2,3,4,2,1] 对比相邻的两个值  j 大于 j+1 则两个值交换位置 1.2 测试效率 bubbleSort(arr) 0. 测试数据 arr ...

  7. JavaScript 冒泡排序

    冒泡排序 基本思路:双重for循环 第一个for控制轮数,轮数为数据个数-1 第二个for控制次数,次数为数据个数-1(至少两两比较) 法一:(简单版) 原理:相邻两元素比较,大的靠后,排列元素个数- ...

  8. JavaScript——冒泡排序、选择排序

    目录 一.冒泡排序 二.选择排序 一.冒泡排序 冒泡算法是最易懂的排序算法,它实现简单,但是效率较低,适合n较小时使用. 基本思路: 依次比较相邻的两个数,如果不符合排序规则,则调换两个数的位置.先比 ...

  9. JavaScript 冒泡排序原理

    冒泡排序原理 升序 1.比较相邻的元素.如果第一个比第二个大,就交换他们两个. 2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对.在这一点,最后的元素应该会是最大的数. 3.针对所有的元 ...

最新文章

  1. Scala数值类型转换
  2. python编写异常处理_Python 简明教程 --- 23,Python 异常处理
  3. GDI+绘制极坐标图(Polar Diagram)
  4. 我被C++开发欺辱的岁月
  5. Nginx下Uwsgi模块常用参数说明
  6. java中插入排序_Java中的插入排序
  7. VMware虚拟机中Centos7的IP地址设置方法
  8. HBase简介及使用
  9. 商业智能—概念与主要理论
  10. 二开要饭网免费开源源码
  11. 563. 二叉树的坡度【我亦无他唯手熟尔】
  12. 有discuz数据库,忘了管理员密码,怎样进后台
  13. 如何解决您与此网站之间建立的连接不安全,该页面采用不加密的http传输协议?
  14. Linux程序设计(第4版)
  15. 在?快来pick你最喜爱的团队!
  16. 数字电路42( 单稳态触发器)
  17. php 判断 ip 城市,利用PHP怎么根据IP地址判断城市
  18. [UE5蓝图基础二]8.[UI]血蓝条的制作
  19. 如何在linux部署pdf文档,LINUX安装部署文档.pdf
  20. clock gating check

热门文章

  1. python commands_python-commands模块
  2. Android studio 豆沙护眼色配置、字体大小设置、内存大小设置等各类疑难杂症
  3. vue单页面通过prerender-spa-plugin插件进行SEO优化
  4. Pygame精灵和碰撞检测
  5. Flink实战问题(一):Unable to create a sink for writing table
  6. C# 执行PING命令 查看IP是否在位
  7. 微型计算机怎么与电视连接,如何将台式电脑与电视连接
  8. 三天学会Mysql之第(三)天:创建修改删除
  9. java 线程僵死_线程池子线程超时(僵死)问题
  10. 安装sql server management studio2019发生严重错误0x80070643,更新SSMS2019后出现错误:应用程序无法启动,因为应用程序的并行配置不正确等