當聽到別人說用了冒泡排序進行排序時,不瞭解的肯定疑惑什麼是冒泡排序、定義是什麼?
定義:n個記錄進行冒泡排序的方法是:首先將第一個記錄的關鍵字和第二個記錄的關鍵字進行比較,若爲逆序,則交換兩個記錄的值,然後比較第二個記錄和第三個記錄的關鍵字,依此類推,直到第n-1個記錄和第n個記錄的關鍵字比較過爲止。上述過程稱爲第一趟冒泡排序,其結果是關鍵字最大的記錄被交換到第n個記錄位置上。然後進行第二趟冒泡排序,對前n-1個記錄進行同樣的操作,其結果是關鍵字次大的記錄被交換到第n-1個記錄的位置上。最多進行n-1趟,所記錄有序排列。若在某趟冒泡排序過程中沒有進行相鄰位置的元素交換處理,則可結束排序過程。
冒泡排序法在最好情況下(待排序列已按關鍵碼有序),只需做一趟排序,元素的比較次數爲n-1且不需要交換元素,因此總比較次數爲n-1次,總交換次數爲0次。在最壞情況下(元素已經逆序排列),進行第j趟排序時,最大的j-1個元素已經排好序,其餘的n-(j-1)個元素需要進行n-j次比較和n-j次交換,因此總比較次數爲n(n-1)/2,總交換次數爲n(n-1)/2.
冒泡排序是一種穩定的排序方法,其時間複雜度爲O(n的二次方)。
在排序過程中僅需要一個元素的輔助空間用於元素交換,空間複雜度爲O(1)。
瞭解了冒泡排序定義後,那就開始實踐吧!
/**
* 冒泡排序
* @author ZL
* 2017年8月13日
*/
public class BubbleSort {
public static void main(String[] args) {
int[] ints={12,55,34,143,51,31,85,61,42,29,49,43,64,59,64,46,85,15,62,88};
System.out.println("*****************排序之前***************");
for (int i : ints) {
System.out.print(i+" ");
}
for(int i=ints.length-2;i>=0;i--){
for(int j=0;j<=i;j++){
if(ints[j]>ints[j+1]){
//左邊比右邊大
int temp;
temp=ints[j];
ints[j]=ints[j+1];
ints[j+1]=temp;
}
}
}
System.out.println("\n*****************排序之後***************");
for (int i : ints) {
System.out.print(i+" ");
}
}
}
運行結果:
*****************排序之前***************
12 55 34 143 51 31 85 61 42 29 49 43 64 59 64 46 85 15 62 88
*****************排序之後***************
12 15 29 31 34 42 43 46 49 51 55 59 61 62 64 64 85 85 88 143