冒泡排序思想
让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后)即可。
比如当前有一个数组[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版权协议,转载请附上原文出处链接和本声明。