#步骤拆解:
- 比较相邻的元素。如果第一个比第二个大,就交换它们两个;
 
- 对每一对相邻元素作同样的工作,从开始第一对到未完成排序的最后一对,这样在数组的顶部自动生成一个不断加长的有序数列;
 
- 针对所有的元素重复以上的步骤,除了最后一个;
 
- 重复1-3步,直到排序完成。
 
简单实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 
  | function bubbleSort(arr){     var i = arr.length-1;//需要遍历的元素是从第一个到倒数第二个,因为每次比较的是arr[i]与arr[i+1]     console.time('冒泡排序');     while(i>0){         var pos = 0;//每次遍历重新计算最后交换数据的位置         for(var j=0;j<i;j++){             if(arr[j]>arr[j+1]){                 pos =j;                 arr[j]^=arr[j+1];//亦或可以交换两个不同值的变量的值,如果值相同交换后变成0,需要格外小心。                 arr[j+1]^=arr[j];                 arr[j]^=arr[j+1];             }         }         i=pos;//每次遍历后将下次遍历的终点设置为数组顶部有序数列的开始位置(有序数列不参与下次遍历和交换)     }      console.timeEnd('冒泡排序');        return arr; } 
  | 
 
#小结:
冒泡排序时间复杂度为O(n)-O(n^2),空间复杂度为O(1),稳定
图解: