javascript数组排序之冒泡排序
冒泡排序
作为一名程序员数组的排序算法是必须要掌握的,今天来说最简单的一种数组排序----冒泡排序
冒泡排序原理
冒泡排序算法是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
冒泡排序原理图(未优化前)

这个是我自己使用生成器写的一个小demo,有些简陋,下面是这个demo的项目地址(vue版)
项目地址:array_sort.
这个项目也可以用原生js + 定时器写,有时间的话我会出一个原生版本,到时候会更新,我为了方便所以用js写的
冒泡排序代码(未优化前)
const arr = [];
for(let i = 0; i < 10; i ++) {
arr.push(Math.floor(Math.random() * 100 + 10));
}
console.log("排序前:",arr);
for(let i = 0; i < arr.length; i ++) {
for(let j = 0; j < arr.length - i - 1; j ++) {
if(arr[j] < arr[j+1]) {
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]; // 使用数组结构进行值的交互
}
}
}
console.log("排序后:",arr);
优化版本动图

优化版本代码
const arr = [];
let exchange;
for(let i = 0; i < 10; i ++) {
arr.push(Math.floor(Math.random() * 100 + 10));
}
console.log("排序前:",arr);
for(let i = 0; i < arr.length; i ++) {
exchange = false;
for(let j = 0; j < arr.length - i - 1; j ++) {
if(arr[j] < arr[j+1]) {
[arr[j],arr[j+1]] = [arr[j+1],arr[j]]; // 使用数组结构进行值的交互
exchange = true;
}
}
if(!exchange) {
break;
}
}
console.log("排序后:",arr);
当后面的数字已经排序的情况下,就直接跳出循环,减少循环次数,同时优化j+1,让每次循环不用进行运算j+1的值
时间复杂度分析
| 最好情况 | 空间复杂度 | 最差情况 |
|---|---|---|
| O(n) | O(1) | O(n^2) |
| 已经排好序的数组 | 因为要一个临时空间 | 完全无序,需要遍历每一个元素 |
用适当的空间换时间复杂度是可取的
项目地址
项目地址:array_sort.
javascript数组排序之冒泡排序的更多相关文章
- JavaScript数组排序(冒泡排序、选择排序、桶排序、快速排序)
* 以下均是以实现数组的从小到大排序为例 1.冒泡排序 先遍历数组,让相邻的两个元素进行两两比较 .如果要求小到大排:最大的应该在最后面,如果前面的比后面的大,就要换位置: 数组遍历一遍以后,也就是第 ...
- javascript 数组排序之 sort()
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...
- JS面试Q&A(续):Javascript数组排序, 默认是字符串Unicode排序, 不适合数字
Q:下面代码段的执行后data里面的数据是什么?为什么? var data= [40,1,5,200] data.sort(); A: data的内容是[1, 200, 40, 5] 因为,Javas ...
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析
阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...
- javascript数组排序---2冒泡
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- js中常见的数组排序算法-冒泡排序和选择排序
reverse( ) 数组逆序 // reverse() 数组逆序 var arr = ["边境牧羊犬", "德国牧羊犬", "金毛" ...
- javascript数组排序和prototype详解
原型的概念::原型对象里的所有属性和方法 被所有构造函数实例化出来的对象所共享,类似于java中的 static 正因为共享所以单一的操作 就会影响了全局,因此使用时需注意 基于prototype:为 ...
- javascript中的冒泡排序
冒泡排序:就是将一个数组中的元素按照从大到小或者从小到大的顺序进行排列. var array=[9,8,7,6,5,4,3,2,1]; 第一轮比较:8,7,6,5,4,3,2,1,9 交换了 ...
随机推荐
- php常用错误码的意思
总揽 200:服务器响应正常. 304:该资源在上次请求之后没有任何修改(这通常用于浏览器的缓存机制,使用GET请求时尤其需要注意). 400:无法找到请求的资源. 401:访问资源的权限不够. 40 ...
- 用户模式下的线程同步的分析(Windows核心编程)
线程同步 同一进程或者同一线程可以生成许多不同的子线程来完成规定的任务,但是多个线程同时运行的情况下可能需要对某个资源进行读写访问,比如以下这个情况:创建两个线程对同一资源进行访问,最后打印出这个资源 ...
- Day002 Hello,World!!!
Hello,World! 随便新建一个文件,存放代码 新建一个java文件 文件后缀名为.java Hello.java [注意点] 系统可能没有显示文件后缀名,我们需要手动打开 编写代码 publi ...
- 浅谈Java中的公平锁和非公平锁,可重入锁,自旋锁
公平锁和非公平锁 这里主要体现在ReentrantLock这个类里面了 公平锁.非公平锁的创建方式: //创建一个非公平锁,默认是非公平锁 Lock lock = new ReentrantLock( ...
- windows下使用dos命令手工与ntp服务器同步系统时间
管理员模式的命令窗口 net stop w32time &w32tm /unregister &w32tm /register &net start w32time & ...
- ColyseusJS 轻量级多人游戏服务器开发框架 - 中文手册(系统保障篇)
快速上手多人游戏服务器开发.后续会基于 Google Agones,更新相关 K8S 运维.大规模快速扩展专用游戏服务器的文章.拥抱️原生 Cloud-Native! 系列 ColyseusJS 轻量 ...
- (转)elasticsearch6.0版本安装head插件
1.1 前言 不知道是我电脑问题还是最近的开源软件都比较**,mysql和elasticsearch新版本变动都比较大. elasticsearch6.0貌似已经不支持命令行安装head插件了,反正我 ...
- readdir_r()读取目录内容
readdir()在多线程操作中不安全,Linux提供了readdir_r()实现多线程读取目录内容操作. #include <stdio.h> #include <stdlib.h ...
- OO第三单元作业(JML)总结
OO第三单元作业(JML)总结 目录 OO第三单元作业(JML)总结 JML语言知识梳理 使用jml的目的 jml注释结构 jml表达式 方法规格 类型规格 SMT Solver 部署JMLUnitN ...
- 19 常用API
API 什么是API? API (Application Programming Interface) :应用程序编程接口 简单来说:就是Java帮我们已经写好的一些方法,我们直接拿过来用就可以了 1 ...