内容来自《Offer来了》

冒泡排序(Bubble Sort)算法是一种较简单的排序算法,它在重复访问要排序的元素列时,会依次比较相邻的两个元素,如果左边的元素大于右边的元素,就将二者交换位置,如此重复,直到没有相邻的元素需要交换位置,这时该列表的元素排序完成。

该算法名称的由来是越大的元素会经过交换慢慢“浮”到数列的顶端(升序或降序排列),就如同水的气泡最终会上浮到顶端一样。

5.2.1 冒泡排序算法的原理

如图5-2所示为对数组[4,5,6,3,2,1]进行冒泡排序,每次都将当前数据和下一个数据进行比较,如果当前数据比下一个数据大,就将二者交换位置,否则不做任何处理。这样经过第1趟排序就会找出最大值6并将其放置在最后一位,经过第2趟排序就会找出次大的数据5放在倒数第二位,如此重复,直到所有数据都排序完成。

image.png

5.2.2 冒泡排序算法的Java实现

冒泡排序算法的Java实现如下:

public  static  int[]   bubbleSort(int[]  arr)  {
      //外层循环控制排序趟数
      for  (int  i  =  0;  i  <  arr.length  -  1;  i++)  {
          //内层循环控制每一趟排序多少次
          for  (int  j  =  0;  j  <  arr.length  -  1  -  i;  j++)  {
              if  (arr[j]  >  arr[j  +  1])  {
                  int  temp  =  arr[j];
                  arr[j]  =  arr[j  +  1];
                  arr[j  +  1]  =  temp;
              }
          }
      }
      return  arr;
    }

以上代码实现了一个名为bubbleSort()的冒泡排序算法,分为外层循环和内层循环,外层循环控制排序的次数,内层循环控制每一趟排序多少次。在内层循环中比较当前数据和下一个数据的大小,如果当前数据大于下一个数据,就交换二者的位置,这样重复进行判断,直至整个排序完成,最终返回排序后的数组。