js数组排序算法之冒泡排序
冒泡排序
作为一名程序员数组的排序算法是必须要掌握的,今天来说最简单的一种数组排序----冒泡排序
冒泡排序原理图

这个是我自己使用生成器写的一个小demo,有些简陋,项目地址我放到文末了
冒泡排序原理
使用两层遍历,第一层遍历是记录当前需要比对的数据记作 i,第二层是当前需要比对的数据后面的数据记作 j,如果 i < j 那么交互 i 和 j 的值,一直重复这个过程
冒泡排序代码
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 = i; j < arr.length - 1; j ++) {
if(arr[i] < arr[j+1]) {
[arr[i],arr[j+1]] = [arr[j+1],arr[i]]; // 使用数组结构进行值的交互
}
}
}
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 = i + 1; j < arr.length; j ++) {
if(arr[i] < arr[j]) {
[arr[i],arr[j]] = [arr[j],arr[i]]; // 使用数组结构进行值的交互
exchange = true;
}
}
if(!exchange) {
break;
}
}
console.log("排序后:",arr);
当后面的数字已经排序的情况下,就直接跳出循环,减少循环次数,同时优化j+1,让每次循环不用进行运算j+1的值
时间复杂度分析
| 最好情况 | 空间复杂度 | 最差情况 |
|---|---|---|
| O(n) | O(1) | O(n^2) |
| 已经排好序的数组 | 因为要一个临时空间 | 完全无序,需要遍历每一个元素 |
项目地址
项目地址:array_sort.
本文来自博客园,作者:维A,转载请注明原文链接:https://www.cnblogs.com/forever25/articles/14837825.html

浙公网安备 33010602011771号