Java代碼實現冒泡排序

排序算法分類

排序算法大體可分爲兩種:

   一種是比較排序,時間複雜度O(nlogn) ~ O(n^2),主要有:冒泡排序,選擇排序,插入排序,歸併排序,堆排序,快速排序等。

   另一種是非比較排序,時間複雜度可以達到O(n),主要有:計數排序基數排序桶排序等。

這裏我們來探討一下常用的比較排序算法。下表給出了常見比較排序算法的性能:(圖表來自網絡)

                  

排序算法穩定性的簡單形式化定義爲:如果Ai = Aj,排序前AiAj之前,排序後Ai還在Aj之前,則稱這種排序算法是穩定的。通俗地講就是保證排序前後兩個相等的數的相對順序不變。

冒泡排序(Bubble Sort)

        冒泡排序是簡單經典的排序算法,它重複地走訪過要排序的元素,依次比較相鄰兩個元素,如果他們的順序錯誤就把他們調換過來,直到沒有元素再需要交換,排序完成。這個算法的名字由來是因爲越小(或越大)的元素會經由交換慢慢“浮”到數列的頂端。

 

冒泡排序算法的運作如下:

  1. 比較相鄰的元素,如果前一個比後一個大,就把它們兩個調換位置。
  2. 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
  3. 針對所有的元素重複以上的步驟,除了最後一個。
  4. 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

代碼如下:

public class BubbleDemo {

	public static void main(String[] args) {
		int[] arr = { 2, 3, 4, 0, 1, 5, 8 };
		System.out.println("排序前數組爲:");
		for (int num : arr) {
			System.out.print(num + " ");
		}
		for(int i= 0;i<arr.length-1;i++) {//外層循環控制排序趟數
			for(int j = 0;j<arr.length-i-1;j++) {//內層循環控制每一趟排序多少次
				if(arr[j]>arr[j+1]) {
					int temp = arr[j];
					arr[j]= arr[j+1];
					arr[j+1]= temp;
				}
			}
		}
		System.out.println("");
		System.out.println("排序後數組爲:");
		for (int num : arr) {
			System.out.print(num + " ");
		}
	}
}

冒泡排序的優點:

    每進行一趟排序,就會少比較一次,因爲每進行一趟排序都會找出一個較大值。如上例:第一趟比較之後,排在最後的一個數一定是最大的一個數,第二趟排序的時候,只需要比較除了最後一個數以外的其他的數,同樣也能找出一個最大的數排在參與第二趟比較的數後面,第三趟比較的時候,只需要比較除了最後兩個數以外的其他的數,以此類推……也就是說,沒進行一趟比較,每一趟少比較一次,一定程度上減少了算法的量。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章