冒泡排序

有如下数组

int nums[ ] = {4,2,8,0,5,7,1,3,9}

排序步骤如图。

排序轮数 = 元素个数 - 1;

各轮数对应的排序次数 = 元素总个数 -  排序轮数 - 1;

代码:

1 for(int i = 0 ;i < 9 ; i++) {  // 排序轮数
2   for(int j = 0; j < 9 - i - 1;j++){ // 排序次数
3      if(nums[j] > nums[j + 1]){   // 按照升序排序
4         swap(nums[j],nums[j + 1]);
5       }
6  }
7 }

 优化:

如果我们发现在某趟排序中,没有发生一次交换,则可以提前结束冒泡排序;

 1 public static void bubbleSort(int[] arr) {
 2         int temp = 0;
 3         boolean flag = false;// 表示是否交换
 4         for(int i = 0; i < arr.length - 1; i++) {
 5             for(int j = 0; j < arr.length - i - 1; j++) {
 6                 if (arr[j] > arr[j + 1]) {
 7                     flag = true;
 8                     temp = arr[j];
 9                     arr[j] = arr[j + 1];
10                     arr[j + 1] = temp;
11                 }
12             }
13             if (flag == false) { // 在一趟排序中,一次交换都没有发生
14                 break;
15             } else {
16                 flag = false; // 重置flag,进行下次判断
17             }
18         }
19 
20     }
原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14266860.html