冒泡排序解剖
算法介绍
冒泡排序是通过一系列的“交换”动作完成的,是交换类排序的一种。
首先第一个记录和第二个记录比较,如果第一个大吗,则两者交换,否则不交换;
然后第二个记录和第三个记录比较,如果第二个大,则两者交换,否则不交换……一直按这种方式进行下去,最终最大的那个记录被交换到了最后,一趟冒泡排序完成。
然后进行第二趟冒泡排序,对前n-1个记录进行同样的操作,使关键字次大的记录被安置到第n-1个记录的位置上……一直这样进行下去,直到“在一趟排序过程中没有进行过交换记录的操作”,这也是冒泡排序算法的结束条件。
算法代码(Java)
public static <T extends Comparable<? super T>> void bubbleSort(T[] a) {
int i,j,flag;
T temp;
for(i=a.length-1;i>0;i--) {//最多进行a.length-1趟排序
flag = 0;
for(j=0;j<i;j++) {对当前无序区间a[0......i]进行排序
if(a[j].compareTo(a[j+1])>0) {//大值交换到后面
temp = a[j+1];
a[j+1] = a[j];
a[j] = temp;
flag = 1;
}
}
if(flag == 0) {//结束条件:某一趟排序是否有交换
return;
}
}
}
算法分析
最坏时间复杂度:O(n^2)
最好时间复杂度:O(n)
平均时间复杂度:O(n^2)
空间复杂度:O(1)