冒泡排序的2种写法

  假如有几个数字 int score[] = {67, 69, 75, 88};  按照从大到小排序。

  有2种思路:

  第一种思路:score[j] 和 score[j+1] 比较,如果前者比后者小,把前者和后者调换顺序,两两调换后一轮下来,最小的会被排到最后去。

  每一轮j都从0开始,当i轮排序,就有最后面的i个数字因为他是最小的,所以后面的每轮都不用理他了,也就是 score.length-1-i  往后的数不用管了,如上,第一轮有4个数字 i为0 ,那么score.length-1-i  为3,也就是下标是3以后的可以不用管,3往后没有数字,所以第一轮所有的数字都要参加比较,第二轮i=1,score.length-1-i  为2 也就是说 下标2后面的 下标为3的数字不用比了,因为两两比较厚,67会到 score[3],实现代码如下:

var a = [2,3,4,5,9,8,6];
function sort(a){
    var len = a.length - 1,
        temp;
    for(var i = 0; i < len; i++){
        for(var j = 0; j < len - i; j++){
            if(a[j] < a[j+1]){
                temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}
sort(a);

  第二种思路:用 88 和 75 比较,再和69比较,再和 67 比较,发现88是最大的,把他排到第一位;然后 i=1,也就是第二轮,就不用看下标为 0 的 88 了,因为他是老大,然后接着比较。实现代码如下:

var a = [1,2,3,4,5,6,9,8,6];
function sort(a){
    for(var i=0,len1 = a.length - 1;i<len1;i++){
        for(var j = a.length - 2;j>=i;j--){
            if(a[j]<a[j+1]){
                var temp = a[j];
                a[j] = a[j+1];
                a[j+1]=temp;
            }
        }
    }
    return a;
}
sort(a)

  要理解j = a.length - 2 和 j >= i。

原文地址:https://www.cnblogs.com/goloving/p/8510697.html