VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > JavaScript教程 >
  • 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.   https://gitee.com/forever25/array_sort


相关教程