冒泡排序

*数组的冒泡排序:经典算法之一
function bubbleSort(arr){
  //控制比较多少轮[每一轮都是把当前最大值放在末尾]
for(var i=0;i<arr.length - 1;i++){
  //判断需不需要比较
  var flag = false;
//控制每一轮比较多少次[从数组第一项开始,俩俩比较]
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;
    //只要还发生一次交换位置,说明我们假设失败了,数组还没有排好序,true还没排好序
    flag = true;
  }
}
//如果当前这一轮,俩俩比较了一圈,都没有发现需要交换位置的,说明现在的数组就是排好序的,则直接结束循环即可,没必须再比较了
//如果当前已经排好序了"flag===false",不需要在比较下一轮了
if(!flag) break;
}
return arr;
}
var arr = [16, 8, 134, 25, 1];
console.log(bubbleSort(arr));//=>[1, 8, 16, 25, 134]
 8  16  [8, 16, 134, 25, 1]
   16 134 [8, 16, 134, 25, 1]
   134 25 [8, 16, 25, 134, 1]
   134 1  [8, 16, 25, 1, 134]  第一轮两两比较结束后,当前最大的值放在了末尾
   8 16  [8, 16, 25, 1, 134]
   16 25 [8, 16, 25, 1, 134]
   25 1  [8, 16, 1, 25, 134]
   8 16 [8, 16, 1, 25, 134]
   16 1 [8, 1, 16, 25, 134]
   8 1  [1, 8, 16, 25, 134]
i控制比较多少轮  i=0;i<arr.length-1;i++   “每一轮的结果是把当前最大的值放在末尾,所以数组有5项,只要把4个值分别放在末尾,即可完成排序”
    每一轮都干相同的事情:从数组第一项开始循环,拿出每一项和其后一项进行比较,如果当前项比后一项要大,则两者交换位置  j=0;j<arr.length-1-i;j++  “不用和自己比,五个值最多循环4次「也就是比较四次」;还不需要和之前放在末尾的比;”
         当前项:arr[j]
         后一项:arr[j+1]
    i=0 第一轮  还没有放末尾过
    i=1 第二轮  已经放末尾1个
    i=2 第三轮  已经放末尾2个
    ...
    i是几,相当于已经放在末尾几个
var arr = [8,16,25,1,1];  sort(排序)
arr.sort(function(a,b){
  //迭代数组中的每一项,每迭代一次,这个回调函数执行一次
  // a:当前迭代这一项
  // b:它的后一项
  //返回一个">0"的值,让a/b交换位置,否则位置不变
  //------新版谷歌正好反着
  //   b:当前迭代这一项  a:它的后一项   返回“<0"的值让俩者交换位置
  return a - b;//=>升序
});
console.log(arr);//=>[1, 1, 8, 16, 25]

 

posted @ 2021-05-22 00:30  林默默  阅读(82)  评论(0)    收藏  举报