1. 程式人生 > >氣泡排序-java實現

氣泡排序-java實現

氣泡排序是一種常用的排序演算法,它的核心部分是雙重巢狀迴圈,因而氣泡排序的時間複雜度是O(N2)。其基本思想是:每次將相鄰的兩個元素進行比較,如果他們的順序錯誤就把他們交換過來(這裡順序是我們預先設定的按從大到小或者按從小到大)。

例如,我們需要將一組數按照從大到小進行排序。既然是從大到小排序,即越小的越靠後。每次通過比較相鄰的兩個數,如果後面的數比前面的數大,則交換這兩個數的位置。一直比較下去直到最後兩個數比較完畢後,最小的數就在最後一個了,這樣我們就確定了最小一個數的位置,說明“一趟”完成了,每一趟只能確定一個數的位置。由於整個過程非常類似氣泡一步一步往上“冒”,因而得名“氣泡排序”演算法。

總結擴充套件一下:如果有n個數進行排序,我們只需要確定n-1個數的位置,也就是要進行n-1趟操作。而“每一趟”都需要從第1位開始進行相鄰兩個數的比較,將較小的一個數放在後面,比較完後向後移動一位並繼續比較下面兩個相鄰數的大小,如此重複下去,直到最後一個未確定位置的數。氣泡排序的優點顯而易見是每進行一趟排序,就會少比較一次,因為每進行一趟排序都會找出一個較小值,從而下一趟也就不需要再與該數進行比較。

下面用java程式碼實現一下氣泡排序:

package test;

public class test5 {
	public static void main(String[] args) {
		int a[] = {12,23,24,11,66,43,98,70,1,2};
		System.out.println("sort before:");
		printArray(a);
		System.out.println("after bubbleSort:");
		bubbleSort(a);
		printArray(a);
	}
	
	public static void bubbleSort(int[] a) {
		int temp = 0;
		int n = a.length;
		//外層迴圈控制排序趟數,n個數排序,只用進行n-1趟
		for(int i = 0; i < n-1; i++) {
			//內層迴圈控制每一趟排序多少次,從第1位開始比較直到最後一個尚未歸位的數
			for(int j = 0; j < n-i-1; j++) {
				//比較大小並交換
				if (a[j] < a[j+1]) {
					temp = a[j];
					a[j] = a[j+1];
					a[j+1] = temp;
				}
			}
		}
	}
	
	public static void printArray(int[] numbers) {
        for (int i = 0 ; i < numbers.length ; i ++ ) {
        	System.out.print(numbers[i] + ",");
        }
        System.out.println("");
    }
}
排序結果:
sort before:
12,23,24,11,66,43,98,70,1,2,
after bubbleSort:
98,70,66,43,24,23,12,11,2,1,