javascript数组排序算法之冒泡排序

冒泡排序

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

冒泡排序原理

冒泡排序算法是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

冒泡排序原理图(未优化前)

在这里插入图片描述

这个是我自己使用生成器写的一个小demo,有些简陋,下面是这个demo的项目地址(vue版)
项目地址:array_sort.
这个项目也可以用原生js + 定时器写,有时间的话我会出一个原生版本,到时候会更新,我为了方便所以用vue写的

冒泡排序代码(未优化前)

const arr = [];
for(let i = 0; i < 10; i ++) {
	arr.push(Math.floor(Math.random() * 100 + 10));
}
console.time('s');
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);
console.timeEnd('s');

输出结果
排序前: (10) [86, 66, 88, 32, 24, 59, 87, 65, 44, 41]
排序后: (10) [88, 87, 86, 66, 65, 59, 44, 41, 32, 24]
s: 0.364990234375 ms

优化版本动图

在这里插入图片描述

优化版本代码

const arr = [];
let exchange;
for(let i = 0; i < 10; i ++) {
	arr.push(Math.floor(Math.random() * 100 + 10));
}
console.time('s');
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);
console.timeEnd('s');

上述代码输出结果
排序前: (10) [65, 69, 64, 95, 100, 92, 16, 81, 96, 87]
排序后: (10) [100, 96, 95, 92, 87, 81, 69, 65, 64, 16]
s: 0.328125 ms

优化版本快0.04左右,十条数据排序0.04ms,不过大量的数据排序,应该也不会让前端处理

当后面的数字已经排序的情况下,就直接跳出循环,减少循环次数,同时优化j+1,让每次循环不用进行运算j+1的值

时间复杂度分析

最好情况空间复杂度最差情况
O(n)O(1)O(n^2)
已经排好序的数组因为要一个临时空间完全无序,需要遍历每一个元素

项目链接

项目链接:array_sort.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript中有多种排序方法可以对数组进行排序。根据提供的引用内容,我们可以使用以下几种方法进行排序: 方法一:使用sort()函数和自定义比较函数进行排序。可以通过传入一个比较函数作为参数来指定排序的方式。比较函数接受两个参数a和b,如果a应该排在b的前面,则返回一个负数,如果a应该排在b的后面,则返回一个正数,如果a和b相等,则返回0。例如,可以使用该方法对数组arr进行排序: var arr = [123, 203, 23, 13, 34, 65, 65, 45, 89, 13, 1]; function compare(a, b) { return a - b; } arr.sort(compare); console.log(arr); // 输出:[1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203] 方法二:使用快速排序算法进行排序。快速排序是一种分治的排序算法,它通过选择一个基准元素,把数组分成两个子数组,将小于基准的元素放在左边,将大于基准的元素放在右边,然后递归地对子数组进行排序。可以使用以下代码实现快速排序: var arr = [123, 203, 23, 13, 34, 65, 65, 45, 89, 13, 1]; function quickSort(arr) { if (arr.length <= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1); var left = []; var right = []; for (var i = 0; i < arr.length; i++) { if (arr[i] < pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); } console.log(quickSort(arr)); // 输出:[1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203] 方法三:使用冒泡排序算法进行排序冒泡排序是一种简单的排序算法,它通过多次遍历数组,比较相邻元素的大小并交换位置,将较大的元素逐步“冒泡”到数组的末尾。可以使用以下代码实现冒泡排序: var arr = [123, 203, 23, 13, 34, 65, 65, 45, 89, 13, 1]; for (var i = 0; i < arr.length - 1; i++) { for (var j = 0; j < arr.length - 1 - i; j++) { if (arr[j] > arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } console.log(arr); // 输出:[1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203] 以上是三种常见的JavaScript数组排序方法。根据不同的需求和数据规模,选择不同的排序方法可以提高排序效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值