冒泡排序
代码实现
package com.atguigu.sort;
import java.util.Arrays;
/**
* @author WHT
* @create 2021-06-15 11:15
*/
public class BubbleSort {
public static void main(String[] args) {
int arr[] = {3, 9, -1, 10, -2};
System.out.printf("排序前的数组:");
System.out.println(Arrays.toString(arr));
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
// 如果前面的数比后面的数大,则交换。
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
System.out.printf("第%d趟排序后的数组:", i + 1);
System.out.println(Arrays.toString(arr));
}
}
}
运行结果
D:\java\jdk-11.0.11\bin\java.exe "-javaagent:D:\IntelliJ IDEA 2020.1.1\lib\idea_rt.jar=9740:D:\IntelliJ IDEA 2020.1.1\bin" -Dfile.encoding=UTF-8 -classpath E:\WHT\Project\Java\DataStructures\out\production\DataStructures com.atguigu.sort.BubbleSort
排序前的数组:[3, 9, -1, 10, -2]
第1趟排序后的数组:[3, -1, 9, -2, 10]
第2趟排序后的数组:[-1, 3, -2, 9, 10]
第3趟排序后的数组:[-1, -2, 3, 9, 10]
第4趟排序后的数组:[-2, -1, 3, 9, 10]
Process finished with exit code 0
优化的冒泡排序
代码实现
package com.atguigu.sort;
import java.util.Arrays;
/**
* @author WHT
* @create 2021-06-15 11:15
*/
public class BubbleSort {
public static void main(String[] args) {
int arr[] = {3, 9, -1, 10, 20};
System.out.printf("排序前的数组:");
System.out.println(Arrays.toString(arr));
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = false; // 标识变量,表示是否进行过交换。(不一样的地方)
for (int j = 0; j < arr.length - 1 - i; j++) {
// 如果前面的数比后面的数大,则交换。
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = true;
}
}
System.out.printf("第%d趟排序后的数组:", i + 1);
System.out.println(Arrays.toString(arr));
// 在这趟排序中,一次交换都没有发生过。(不一样的地方)
if (!flag) {
break;
}
}
}
}
运行结果
D:\java\jdk-11.0.11\bin\java.exe "-javaagent:D:\IntelliJ IDEA 2020.1.1\lib\idea_rt.jar=10243:D:\IntelliJ IDEA 2020.1.1\bin" -Dfile.encoding=UTF-8 -classpath E:\WHT\Project\Java\DataStructures\out\production\DataStructures com.atguigu.sort.BubbleSort
排序前的数组:[3, 9, -1, 10, 20]
第1趟排序后的数组:[3, -1, 9, 10, 20]
第2趟排序后的数组:[-1, 3, 9, 10, 20]
第3趟排序后的数组:[-1, 3, 9, 10, 20]
Process finished with exit code 0
封装的冒泡排序
// 将前面的冒泡排序算法,封装成一个方法。
public static void bubbleSort(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = false; // 标识变量,表示是否进行过交换。(不一样的地方)
for (int j = 0; j < arr.length - 1 - i; j++) {
// 如果前面的数比后面的数大,则交换。
if (arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag = true;
}
}
// 在这趟排序中,一次交换都没有发生过。(不一样的地方)
if (!flag) {
break;
}
}
}
8万随机数测试:17s 。