冒泡排序只会操作相邻的两个数据。每次冒泡操作都会对相邻的两个元素进行比较,看是否满足大小关系要求。如果不满足就让它俩互换。一次冒泡会让至少一个元素移动到它应该在的位置,重复 n 次,就完成了 n 个数据的排序工作。
public class BubbleSortTest {
/**
*
* @param a 待排序的数组
* @param n 待排序的数组的大小
*/
public void bubbleSort(int a[], int n) {
if (n <= 1) {
return;
}
for (int j = 0; j < n; j++) {
// 提前退出冒泡循环的标志位
boolean flag = false;
// 内层循环 每循环一次 就有一个最大的数据排到数组的最后
// 外层循环的作用是驱动内层循环需要运行多少次 就能得到 最终的有序数据
for (int i = 0; i < n - j - 1; i++) {
// 升序 降序 通过控制 > 还是 < 来控制
// > 前一个大于后一个交换 那么最终结果是升序
// < 前一个小于后一个交换 那么最终结果是降序
if (a[i] > a[i + 1]) {
int temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
// 有数据交换
flag = true;
}
}
// 只要有一次没有发生 数据交换 那么代表整个数据已经是有序的了,就不用再继续循环排序下去
// 没有数据交换,提前退出
if (!flag) {
break;
}
}
}
public static void main(String[] args) {
int[] a = new int[6];
a[0] = 4;
a[1] = 5;
a[2] = 6;
a[3] = 3;
a[4] = 2;
a[5] = 1;
BubbleSortTest bubbleSortTest = new BubbleSortTest();
bubbleSortTest.bubbleSort(a, 6);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}