冒泡排序

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。

由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i, j的值依次为1,2,...10-i。

        var bubbleSort = function(array){
          for(var i=0,n=array.length;i<n;i++){
            for (var j = 0; j < n - i - 1; j++){//比如一共有五个泡泡,那么每趟为
              var a = array[j],b= array[j+1];//0V1,1V2,2V3,3V4
              if (a > b){                    //0V1,1V2,2V3
                array[j] = b;                //0V1,1V2
                array[j+1] = a;              //0V1
              }
            }
          }
        }

        var bubbleSort2 = function(array){
          for(var i=0,n=array.length;i<n-1;i++){
            for (var j = n-1; j > i; j--){//比如一共有五个泡泡,那么每趟为
              var a = array[j],b= array[j-1]//4V3,3V2,2V1,1V0
              if (a < b){                   //4V3,3V2,2V1
                array[j] = b                //4V3,4V2
                array[j-1] = a              //4V3
              }
            }
          }
        }

//这个不是冒泡排序,因为不是比较相邻的元素
        var exchangeSort = function(array){
          for (var i = 0,n=array.length; i < n; i++) { 
            for (var j = n - 1; j > i; j--) { //比如一共有五个元素,那么每趟为
              if (array[i] > array[j]) {        //0V4,0V3,0V2,0V1
                array[i] = array[j] + array[i]; //1V4,1V3,1V2
                array[j] = array[i] - array[j]; //2V4,2V3
                array[i] = array[i] - array[j]; //3V4
              } 
            } 
          }
        }

加入一个布尔,如果排好序就不用继续空循环

        var bubbleSort = function(array){
          for(var i=0,n=array.length;i<n;i++){
            var swap = false;
            for (var j = 0; j < n - i - 1; j++){//比如一共有五个泡泡,那么每趟为;
              if (array[j] > array[j + 1]){  //0V1,1V2,2V3,3V4
                array[j + 1] ^= array[j];    //0V1,1V2,2V3
                array[j] ^= array[j + 1];    //0V1,1V2
                array[j + 1] ^= array[j];    //0V1
                swap = true;
              }
            }
            if (!swap) break;
          }
        }

原文地址:https://www.cnblogs.com/rubylouvre/p/1650509.html