首页 > 技术文章 > 冒泡算法精简理解

bpjj 2019-05-21 20:31 原文

组长安排的工作做完了,闲得蛋疼。重新理解下最经典的冒泡算法。

原理:比较相邻的两个数,如果第一个数比后一个要大,则交换位置。

其实原理很好理解了,一看就是写个循环。但是要交换几次呢。我们就拿最简单的排序来推理一下。

假设数组是正序的1~9,我们手动排序的话需要交换0次。这是最少的交换次数。

如果数组是倒序9~1,我们需要一个一个的,9和8交换,9和7交换。。。。9和1交换,9到了最后一位,到达了他最终到达的位置,交换了8次。

然后是8,8和7交换,8和6交换。。。。8和1交换,到达了倒数第二位,这个数字也到达了他最终到达的位置,交换了7次。

。。。。。。

然后是2,2和1交换,交换了1次。

结束。

到了这里,我们定睛一看,感觉推理出来了。排了8次序,每次交换的次数是逐一递减的。

交换次数 = (n-1)+(n-2)+(n-3)+......+(n-(n-1))+0;

数学不好,不会推导,按照过程写出来就行了。

按照javascrip写下思路

function mp(arr){    //arr为需要排序的数组
  var length = arr.length;
  for(var i = 0;i < length - 1;i++){    //外循环为次数,需要循环n-1次
    for(var j = 0; j < length - 1 - i;j++){  //内循环为交换的次数 次数为 n-1-已经循环的次数
      if(arr[j] > arr[j+1]){      //如果前者比后者大,交换位置
        var a = arr[j];
        arr[j] = arr[j+1];
        arr[j+1] = a;
      }
    }
  }
  return arr;
}

 

推荐阅读