- 时间复杂度:O(n^2)
- 若原数组本身有序,只需n-1次比较就可完成。若是倒序,比较次数为(n-1)+(n-2)+(n-3)+…1 = n(n-1)/2,交换次数和比较次数等值。
public class BubbleSort {public static <AnyType extends Comparable<? super AnyType>> void bubbleSort(AnyType[] a, int left, int right) {for (int i=0; i<a.length-1; i++) {boolean flag = true; //设定一个标记,若为true,则表示此次循环没有进行交换,也就是待排序列已经有序,排序已然完成for (int j=0; j<a.length-1-i; j++) {if (a[j].compareTo(a[j+1]) > 0) {swapReferences(a, j, j+1);print(a);flag = false;}}if (flag) {break;}}}
交换方法:
public static <AnyType extends Comparable<? super AnyType>> void swapReferences(AnyType [] a, int left, int right) {AnyType tmp = a[left];a[left] = a[right];a[right] = tmp;}