冒泡排序的过程很简单,就是不断交换,这里不再演示过程
代码实现如下:
java
public static void bubbleSort(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]) {
swap(arr,j,j+1);
}
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
其实,这个排序已经是优化过的了,因为第二层循环中 j < arr.length - i - 1,这里 减 i 是因为,前面已经排过序了, 不需要再排一次
但有一种情况是,可能数组已经有序了,但是程序并没有执行完毕。所以还可以再次优化:
java
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 - i - 1; j++) {
if(arr[j] > arr[j+1]) {
swap(arr,j,j+1);
flag = true;
}
}
if(!flag){
break;
}
}
}
private static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
若并没有发生交换,说明已经有序了,直接结束循环即可
冒泡排序的特性:
-
冒泡排序是一种非常容易理解的排序
-
时间复杂度:O(N^2)
-
空间复杂度:O(1)
-
稳定性:稳定