冒泡排序解剖
算法介紹
冒泡排序是通過一系列的“交換”動作完成的,是交換類排序的一種。
首先第一個記錄和第二個記錄比較,如果第一個大嗎,則兩者交換,否則不交換;
然後第二個記錄和第三個記錄比較,如果第二個大,則兩者交換,否則不交換……一直按這種方式進行下去,最終最大的那個記錄被交換到了最後,一趟冒泡排序完成。
然後進行第二趟冒泡排序,對前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)