JavaScript 实现 -- 冒泡排序

87 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路

本文主要记录了JavaScript 实现 -- 冒泡排序及其原理、时间复杂度、算法稳定性。

冒泡排序

冒泡排序(Bubble Sort)也叫气泡排序、泡沫排序,是一种比较简单的排序算法。

它通过遍历数组,比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置,这样第一次遍历后数组的最大元素就排在了数组的末尾。采用相同的方法再次遍历,直至整个数组都有序为止。

示例代码

理解完冒泡排序的原理,我们再来看看实现代码:

		Array.prototype.bubbleSort = function(){
		    for(let i = 0; i < this.length - 1; i++){
		    	//j < length - 1 - i 内层循环只循环未排序的数组元素
		        for(let j = 0; j < this.length - 1 - i;j++){
		            if(this[j] > this[j+1]){
		            	//交换数组元素
		                [this[j], this[j+1]] = [this[j+1], this[j]];
		            }
		        }
		    }
		} 
        const arr = [6,5,4,3,2,1];
        arr.bubbleSort(); 
        console.log(arr);   

控制台输出: 在这里插入图片描述

冒泡排序过程

在这里插入图片描述

空间复杂度

由于冒泡排序中只有缓存变量需要内存空间, 所以空间复杂度为O(1)。

时间复杂度

冒泡排序有两层循环,所以其时间复杂度为O(n^2)

最坏的情况是每次都需要交换, 共需遍历并交换将近n²/2次, 时间复杂度为O(n²). 最佳的情况是内循环遍历一次后发现排序是对的, 因此退出循环, 时间复杂度为O(n)

算法稳定性

冒泡排序是稳定的算法;

即在数组中存在a[i]=a[j],若在排序之前,a[i]在a[j]前面;并且排序之后,a[i]仍然在a[j]前面。

本文到此结束

如果大家还有什么其他想法,欢迎在评论区交流!