`

冒泡排序

    博客分类:
  • js
J# 
阅读更多
冒泡排序(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。
  1. var bubbleSort = function(array){
  2.  for(var i=0,n=array.length;i<n;i++){
  3.   for (var j = 0; j < n - i - 1; j++){//比如一共有五个泡泡,那么每趟为
  4.     var a = array[j],b= array[j+1];//0V1,1V2,2V3,3V4
  5.     if (a > b){                    //0V1,1V2,2V3
  6.       array[j] = b;                //0V1,1V2
  7.       array[j+1] = a;              //0V1
  8.     }
  9.   }
  10.  }
  11. }

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

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

加入一个布尔,如果排好序就不用继续空循环
  1. var bubbleSort = function(array){
  2.  for(var i=0,n=array.length;i<n;i++){
  3.   var swap = false;
  4.   for (var j = 0; j < n - i - 1; j++){//比如一共有五个泡泡,那么每趟为;
  5.     if (array[j] > array[j + 1]){  //0V1,1V2,2V3,3V4
  6.       array[j + 1] ^= array[j];    //0V1,1V2,2V3
  7.       array[j] ^= array[j + 1];    //0V1,1V2
  8.       array[j + 1] ^= array[j];    //0V1
  9.       swap = true;
  10.     }
  11.   }
  12.   if (!swap) break;
  13.  }
  14. }
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics