版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86637106
1 冒泡排序
- 简易版本:简单
- 优化版:减少每趟次数
- 最终版:考虑有序,减少趟数
1.1 冒泡初级版
package day04.sort;
import java.util.Arrays;
public class BubbleSort1 {
public static void main(String[] args) {
int[] arr = {9, 8, 7, 6, 5};
sort(arr);
}
public static void sort(int[] arr) {
for (int j = 0; j < arr.length - 1; j++) {
System.out.println("第 " + j + " 趟 ");
for (int i = 0; i < arr.length - 1; i++) {
System.out.print("第" + (i + 1) + "次");
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
}
public static void sortSecond(int[] arr) {
System.out.println("第二趟");
for (int i = 0; i < arr.length - 1 - 1; i++) {
System.out.print("第" + (i + 1) + "次");
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println(Arrays.toString(arr));
}
}
public static void sortFirst(int[] arr) {
System.out.println("第一趟");
for (int i = 0; i < arr.length - 1; i++) {
System.out.print("第" + (i + 1) + "次");
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println(Arrays.toString(arr));
}
/* //第一趟,第一次
int i = 0;
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println("第一趟,第一次 "+Arrays.toString(arr));
// 第一趟,第二次
i++;
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println("第一趟,第二次 "+Arrays.toString(arr));
// 第一趟,第三次
i++;
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println("第一趟,第三次 "+Arrays.toString(arr));
// 第一趟,第四次
i++;
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.println("第一趟,第四次 "+Arrays.toString(arr));
*/
}
}
第 0 趟
第1次[8, 9, 7, 6, 5]
第2次[8, 7, 9, 6, 5]
第3次[8, 7, 6, 9, 5]
第4次[8, 7, 6, 5, 9]
第 1 趟
第1次[7, 8, 6, 5, 9]
第2次[7, 6, 8, 5, 9]
第3次[7, 6, 5, 8, 9]
第4次[7, 6, 5, 8, 9]
第 2 趟
第1次[6, 7, 5, 8, 9]
第2次[6, 5, 7, 8, 9]
第3次[6, 5, 7, 8, 9]
第4次[6, 5, 7, 8, 9]
第 3 趟
第1次[5, 6, 7, 8, 9]
第2次[5, 6, 7, 8, 9]
第3次[5, 6, 7, 8, 9]
第4次[5, 6, 7, 8, 9]
Process finished with exit code 0
1.2 冒泡(升级版)
- 减少每趟比较次数
package day04.sort;
import java.util.Arrays;
/*
* 第二版本,减少每一趟的次数
* */
public class BubbleSort2 {
public static void main(String[] args) {
int[] arr = {9, 8, 7, 6, 5};
sort(arr);
}
public static void sort(int[] arr) {
for (int j = 0; j < arr.length - 1; j++) {
System.out.println("第 " + (j + 1) + " 趟");
for (int i = 0; i < arr.length - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.print("第--" + (i + 1) + "--次");
System.out.println(Arrays.toString(arr));
}
}
}
}
第 1 趟
第--1--次[8, 9, 7, 6, 5]
第--2--次[8, 7, 9, 6, 5]
第--3--次[8, 7, 6, 9, 5]
第--4--次[8, 7, 6, 5, 9]
第 2 趟
第--1--次[7, 8, 6, 5, 9]
第--2--次[7, 6, 8, 5, 9]
第--3--次[7, 6, 5, 8, 9]
第 3 趟
第--1--次[6, 7, 5, 8, 9]
第--2--次[6, 5, 7, 8, 9]
第 4 趟
第--1--次[5, 6, 7, 8, 9]
Process finished with exit code 0
1.3 冒泡(最终版)
package day04.sort;
import java.util.Arrays;
public class BubbleSort3 {
public static void main(String[] args) {
int[] arr = {9, 1, 2, 3, 4};
sort2(arr);
System.out.println("========= Final =============");
sortFinal(arr);
}
public static void sort2(int[] arr) {
for (int j = 0; j < arr.length - 1; j++) {
System.out.println("第 " + (j + 1) + " 趟");
for (int i = 0; i < arr.length - 1 - j; i++) {
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
System.out.print("第--" + (i + 1) + "--次");
System.out.println(Arrays.toString(arr));
}
}
}
public static void sortFinal(int[] arr) {
boolean sorted = true;
for (int j = 0; j < arr.length - 1; j++) {
sorted = true; // 假设有序
System.out.println("第 " + (j + 1) + " 趟");
for (int i = 0; i < arr.length - 1 - j; i++) {
System.out.print("第--" + (i + 1) + "--次");
if (arr[i] > arr[i + 1]) {
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
sorted = false;
}
System.out.println(Arrays.toString(arr));
}
if (sorted) { // 减少趟数
break;
}
}
}
}
第 1 趟
第--1--次[1, 9, 2, 3, 4]
第--2--次[1, 2, 9, 3, 4]
第--3--次[1, 2, 3, 9, 4]
第--4--次[1, 2, 3, 4, 9]
第 2 趟
第--1--次[1, 2, 3, 4, 9]
第--2--次[1, 2, 3, 4, 9]
第--3--次[1, 2, 3, 4, 9]
第 3 趟
第--1--次[1, 2, 3, 4, 9]
第--2--次[1, 2, 3, 4, 9]
第 4 趟
第--1--次[1, 2, 3, 4, 9]
========= Final =============
第 1 趟
第--1--次[1, 2, 3, 4, 9]
第--2--次[1, 2, 3, 4, 9]
第--3--次[1, 2, 3, 4, 9]
第--4--次[1, 2, 3, 4, 9]
Process finished with exit code 0