三大经典排序算法之最经典之冒泡排序

排序算法:冒泡排序

冒泡排序的思想:让数组中的当前项和后一项进行比较,如果当前项比后一项大,则两项交换位置(让大的靠后)即可

let ary = [12,8,24,16,1];
第一轮开始比较:
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放到了末尾
 
第二轮开始比较
8<12  不交换位置  [8,12,16,1,24]
12<16  不交换位置  [8,12,16,1,24]
16>1 交换位置 [8,12,1,16,24]
不用再和24比较了,而且本轮结束剩余值中最大的16也放到末尾了
 
第三轮比较
8< 12  不交换位置 [8,12,1,16,24]
12>1  交换位置 [8,1,12,16,24]
不用再和16比较了,而且本轮技术剩余值最大的12也放到末尾了
 
第四轮比较
8>1  交换位置 [1,8,12,16,24]
冒泡结束
 
需要比较length-1轮(5个数,只需要把4个最大的依次放到末尾即可)
第一轮比较4次,最多比较length-1次(不用和自己比较)
第二轮比较3次,每一轮比较我们都把当前最大的放到了末尾,所以当前轮比较多少次,需要把之前放到末尾的值也得去掉
...
 
/*冒泡排序*/
// ary传入的数组
// return的是返回的新数组
function bubble(ary){
  let temp = null;
  //外层循环i控制比较的轮数
  for(let i = 0 ; i< ary.length-1; i++){
  //里层循环控制每一轮比较的次数
    for(let j=0;j< ary.length-1-i; j++){
      if(ary[j]>ary[j+1]){
      //当前项大于后一项
        temp = ary[j];
        ary[j] = ary[j+1];
        ary[j+1] = temp;
      }
    }
}
return ary;
}
let ary = [12,8,24,16,1];
ary = bubble(ary);
console.log(ary);
 
原文地址:https://www.cnblogs.com/itsmart/p/12600325.html