1 import java.util.Random;
2
3 public class BubbleSort {
4
5 public void bubbleSort(int[] list) {
6 int temp = 0; // 用来交换的临时数
7
8 // 要遍历的次数
9 for (int i = 0; i < list.length - 1; i++) {
10 // 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
11 for (int j = list.length - 1; j > i; j--) {
12 // 比较相邻的元素,如果前面的数大于后面的数,则交换
13 if (list[j - 1] > list[j]) {
14 temp = list[j - 1];
15 list[j - 1] = list[j];
16 list[j] = temp;
17 }
18 }
19
20 System.out.format("第 %d 趟:\t", i);
21 printAll(list);
22 }
23 }
24
25 // 对 bubbleSort 的优化算法
26 public void bubbleSort_2(int[] list) {
27 int temp = 0; // 用来交换的临时数
28 boolean bChange = false; // 交换标志
29
30 // 要遍历的次数
31 for (int i = 0; i < list.length - 1; i++) {
32 bChange = false;
33 // 从后向前依次的比较相邻两个数的大小,遍历一次后,把数组中第i小的数放在第i个位置上
34 for (int j = list.length - 1; j > i; j--) {
35 // 比较相邻的元素,如果前面的数大于后面的数,则交换
36 if (list[j - 1] > list[j]) {
37 temp = list[j - 1];
38 list[j - 1] = list[j];
39 list[j] = temp;
40 bChange = true;
41 }
42 }
43
44 // 如果标志为false,说明本轮遍历没有交换,已经是有序数列,可以结束排序
45 if (false == bChange)
46 break;
47
48 System.out.format("第 %d 趟:\t", i);
49 printAll(list);
50 }
51 }
52
53 // 打印完整序列
54 public void printAll(int[] list) {
55 for (int value : list) {
56 System.out.print(value + "\t");
57 }
58 System.out.println();
59 }
60
61 public static void main(String[] args) {
62 // 初始化一个随机序列
63 final int MAX_SIZE = 10;
64 int[] array = new int[MAX_SIZE];
65 Random random = new Random();
66 for (int i = 0; i < MAX_SIZE; i++) {
67 array[i] = random.nextInt(MAX_SIZE);
68 }
69
70 // 调用冒泡排序方法
71 BubbleSort bubble = new BubbleSort();
72 System.out.print("排序前:\t");
73 bubble.printAll(array);
74 // bubble.bubbleSort(array);
75 bubble.bubbleSort_2(array);
76 System.out.print("排序后:\t");
77 bubble.printAll(array);
78 }
79 }