常见算法:js冒泡排序

冒泡排序思想

让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后)即可。
比如当前有一个数组[12,8,24,16,1]
需要比较length-1轮(5个数,只需要把4个放到末尾即可)

i = 0,第一轮开始比较
12 > 8 交换位置 => [8,12,24,16,1]
12 < 24 不交换位置 =>[8,12,24,16,1]
24 > 16 交换位置 => [8,12,16,24,1]
24 > 1 交换位置 => [8,12,16,1,24]
第一轮完成后,虽然没有实现出最后的效果,但是当前数组中最大的这个值24放到了末尾,

第一轮共比较了4次
最多比较length-1次(不用和自己比较)

i = 1,第二轮开始比较
8 < 12 不交换 => [8,12,16,1,24]
12 < 16 不交换 => [8,12,16,1,24]
16 > 1 交换 => [8,12,1,16,24]
不用再和24比较了,而且本轮结束剩余值中最大的16也放到末尾了

第二轮共比较了3次
每一轮比较都把当前最大的值放到了末尾,所以当前轮比较多少次,需要把之前放到末尾的值也得去掉

代码

function babble(arr){
	// 外层循环i控制比较的轮数
	for(let i = 0;i<arr.length;i++){
	//里层循环控制每一轮比较的次数j
			for(let j= 0;j<arr.length-1-i;j++){
				let temp = null;
				if(arr[j]>arr[j+1]){
				//当前项大于后一项的话
					temp = arr[j];					
					arr[j] = arr[j+1];
					arr[j+1] = temp;
				}
			}
	}
	return arr;
}
//测试
let array = [45,12,78,23,56,89]
let result = babble(array)
console.log(result);//=>[12,23,45,56,78,89]

版权声明:本文为wang_qiu_shuang原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。