1.冒泡排序:相邻的两个元素依次比较大小交换
2.注意:比较并交换一轮后,不一定就是有序的,可能还需要很多轮
3.时间复杂度(考量一个代码的好坏)
最好的情况:一次都不交换,时间复杂度为:O(1)
最坏的情况:每个数字都不在最终的位置上,时间复杂度为:O(n)
4.举例说明:(将数组元素从小到大排序)
设数组元素分别为32,2,46,13,60
开始第一轮排序
第一次32,2比较之后的结果为 2,32,46,13,60
第二次32,46比较之后的结果为 2,32,46,13,60
第三次46,13比较之后的结果为 2,32,13,46,60
第四次46,60比较之后的结果为 2,32,13,46,60
第一轮排序结束,继续第二轮排序
第一次2,32比较之后的结果为 2,32,13,46,60
第二次32,13比较之后的结果为 2,13,32,46,60
第三次32,46比较之后的结果为 2,13,32,46,60
.............
一个数组里面有n个元素,需要进行n-1轮排序
5.代码实现
public class BubbleSoft {
public static void main(String[] args) {
//使用冒泡排序对一组数进行排序,使得最终结果是一个从小到大的顺序
int[] arr = {11, 23, 45, 22, 1, 45, 25, 68, 19};
System.out.println("排序之前:");
printArray(arr);
System.out.println();
//定义一个方法实现对数组的冒泡排序
int[] arr1 = bubbleSoft(arr);
System.out.println("排序之后:");
printArray(arr1);
}
//定义方法实现冒泡排序
/**
* 返回值类型:int[]
* 参数列表:int[] arr
*/
public static int[] bubbleSoft(int[] arr) {
for (int i = 0; i < arr.length - 1; i++) { //外层控制排序的次数
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
return arr;
}
public static void printArray(int[] arr) {
for (int i = 0; i <= arr.length - 1; i++) {
if (i == 0) {
System.out.print("[" + arr[i] + ",");
} else if (i == arr.length - 1) {
System.out.print(arr[i] + "]");
} else {
System.out.print(arr[i] + ",");
}
}
}
}
运行截图