在氣泡從水底冒起的過程中,氣泡的體積是不斷增大的。冒泡排序的基本原理也是如此,在排序過程中,數值大的值會向後移動。
一.分析
1-1 原理
如果待排序的非升序序列的長度為n,在整個冒泡排序過程中,總共會進行n-1趟排序,每趟排序都會從還未排序的序列排出一個最大的數。

如果待排序的序列是升序序列,則隻會進行1趟排序,在第1趟排序時判斷出待排序的序列是升序的,在2趟排序時直接傳回。
1-2 時間複雜度
最好情況:T(n) = O(n) 即是待排序序列已經為升序的情況
最壞情況:T(n) = O(n2)
平均情況:T(n) = O(n2)
二.代碼實作
1 /**
2 * 冒泡排序
3 * @param nums 待排序的序列
4 *
5 * @author Hutao
6 * @since 2.7.0
7 * @date 2021/2/15 21:52
8 */
9 public static void bubbleSort(int[] nums){
10 if(null==nums||nums.length<=1){
11 return;
12 }
13
14 //辨別待排序序列是否為有序序列的辨別
15 boolean inOrder = true;
16
17 for (int i = 0; i < nums.length - 1; ++i) {
18 //在第二趟排序時,如果待排序的序列已經為有序(升序),就無需再排序
19 if (i >= 1 && inOrder) {
20 return;
21 }
22
23 for (int j = 0; j < nums.length - 1 - i; ++j) {
24 if (nums[j] > nums[j + 1]) {
25 //第一趟确定待排序的序列是否已經為有序序列(升序)
26 if(0==i){
27 inOrder = false;
28 }
29 int temp = nums[j];
30 nums[j] = nums[j + 1];
31 nums[j + 1] = temp;
32 }
33 }
34 }
35
36 }
參考源:https://blog.csdn.net/weixin_41190227/article/details/86600821?spm=1001.2014.3001.5506