升序:
1.依次比较数组中的两个相邻元素
2.若前一个大于后一个,则交换两个元素
3.经过一轮冒泡后,将得到最大元素;
public static void bubble3(int[] a) {
int n = a.length - 1; //记录一次循环需要的排序次数
while (true) {
int last=0; //定义一个变量记录索引
for (int i = 0; i < n; i++) { //比较的次数=数组长度-1
System.out.println("比较次数:" + i);
if (a[i] > a[i + 1]) {
swap(a, i, i + 1);
last = i; //将最后一次交换索引
}
}
n=last; //每轮冒泡时,最后一次交换索引作为下一轮冒泡的比较次数
System.out.println("第" + (n + 1) + "轮冒泡" + Arrays.toString(a));
//当索引为0时,表示整个数组有序,则退出最外层while循环
if (n == 0) {
break;
}
}
}
//排序算法三
//1.优化:内存循环的次数 a.length - 1 - i
//2.优化:如一轮冒泡中没有元素的骄傲换,则直接结束循环
public static void bubble2(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
//一轮冒泡 :一轮冒泡需要多少次比较 a.length - 1 - i
boolean flag = false;//是否发生交换
for (int j = 0; j < a.length - 1 - i; j++) { //比较的次数=数组长度-1
System.out.println("比较次数:" + j);
if (a[j] > a[j + 1]) {
swap(a, j, j + 1);
flag = true; //发生交换
}
}
System.out.println("第" + i + "轮冒泡" + Arrays.toString(a)); //
if (!flag) {
break;
}
}
}
//排序算法二 优化内存循环的次数 a.length - 1 - i
public static void bubble1(int[] a) {
for (int i = 0; i < a.length - 1; i++) { //比较的次数=数组长度-1
//一轮冒泡 :一轮冒泡需要多少次比较
for (int j = 0; j < a.length - 1 - i; j++) { //比较的次数=数组长度-1-i
System.out.println("比较次数:" + j);
if (a[j] > a[j + 1]) {
swap(a, j, j + 1);
}
}
System.out.println("第" + i + "轮冒泡" + Arrays.toString(a)); //
}
}
//排序算法一
public static void bubble(int[] a) {
for (int i = 0; i < a.length - 1; i++) {
//一轮冒泡 :一轮冒泡需要多少次比较
for (int j = 0; j < a.length - 1; j++) { //比较的次数=数组长度-1
System.out.println("比较次数:" + j);
if (a[j] > a[j + 1]) {
swap(a, j, j + 1);
}
}
System.out.println("第" + i + "轮冒泡" + Arrays.toString(a)); //
}
}
//两个数交换
public static void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}



