/*
*冒泡排序(优化版)
从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧。
在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出。
*
* 最好时间 O(n), 平均时间O(n^2), 最坏时间O(n^2), 空间O(1) 稳定 n 小时较小
*
*/
import java.util.Arrays;
public class BubbleSort {
public static void main(String[] args) {
int [] a= { 2 , 6 , 1 , 0 , 12 , 5 , 8 , 5, 4 , 11 , 7, 9 };
System.out.println(Arrays.toString(a));
bubble(a);
System.out.println(Arrays.toString(a));
}
public static void bubble (int[] arr) {
int n = arr.length;
boolean isSorted = false;
// 一共比较 n-1 轮
for (int i = n-1; i > 0 && !isSorted; i--) {
isSorted = true; //如果已有序 则跳出for循环 不再比较
//每轮比较 i 次
for (int j = 0; j < i ; j++) {
if (arr[j] > arr[j+1]) {
isSorted = false;
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
}
冒泡排序
最新推荐文章于 2024-06-16 23:59:35 发布