冒泡排序(Bubble Sort)-Java實現

冒泡排序(Bubble Sort)算法簡介:

冒泡排序是一種常見的交換排序。在這個過程中,數字會像泡泡一樣,慢慢從右往左“浮”到序列的頂端,所以這個算法才被稱爲“冒泡排序”。其基本思想是兩兩比較相鄰記錄,如果反序則交換,直到沒有反序的記錄爲止。

冒泡排序(Bubble Sort)算法原理:

例如我們有一個數組,我們需要把較小的元素排在前面,把較大的元素排在後面,那麼需要從尾部到頭部開始比較操作:

  • 從尾部開始比較相鄰的兩元素,如果右邊元素左邊元素小,則交換兩元素位置;否則不作交換。
  • 從後往前對每兩相鄰元素都做同樣的比較、交換操作,直到到達數組序列最左邊,此時序列中最小的數字會移動到最左端。
  • 重新從尾部開始第 1、2 步的操作,除了在這之前頭部已經排好的元素。
  • 繼續對越來越少的數據進行比較、交換操作,直到沒有可比較的數據爲止,排序完成。

舉例說明:

現在需要對數組序列 5 9 3 1 2 8 4 7 6 運用冒泡排序算法從小到大排序。從尾部起,一次比較兩個元素,如果反序則交換,否則不交換。

第一步:從尾向前,6<7,互換位置: 5 9 3 1 2 8 4 6 7

第二步:左移一位,6>4,不換位置: 5 9 3 1 2 8 4 6 7

第三步:左移一位,4<8,互換位置: 5 9 3 1 2 4 8 6 7

.................

第八步:左移一位,1<5,互換位置: 1 5 9 3 2 4 8 6 7

第1輪操作結束,序列中最小的數字就會移動到最左邊。重複上述操作直到序列中第二小的數字移動到第二位,第n小的數字移動到第n位。直到所有的數字都歸位爲止,則排序完成。

冒泡排序(Bubble Sort)代碼實現:

import java.util.Arrays;

public class Demo {
 
	public static void main(String[] args) {
		int[] array= {5,9,3,1,2,8,4,7,6};
		bubbleSort(array);
	}
	public static void bubbleSort(int[] array){
		//外層循環,是需要進行比較的輪數,一共進行8次即可
		for(int i=array.length-1;i>0;i--) {
			//內存循環,是每一輪中進行的兩兩比較與交換
			for(int j=array.length-1;j>array.length-i-1;j--) {
				if(array[j-1]>array[j]) {
					int temp=array[j];
					array[j]=array[j-1];
					array[j-1]=temp;
				}
			}
			System.out.println("第"+(array.length-i)+"輪排序後的數組爲:"+Arrays.toString(array));
		}
	}
}

冒泡排序(Bubble Sort)的時間複雜度:

在冒泡排序中,第1輪需要比較n-1次,第2輪需要比較n-2,.....,第n-1輪需要比較1次。因此,總的比較次數爲(n-1)+(n-2) +...+1≈n²/2。這個比較次數恆定爲該數值,和輸入數據的排列順序無關。不過,交換數字的次數和輸入數據的排列順序有關。假設出現某種極端情況,如輸入數據正好以從小到大的順序排列,那麼便不需要任何交換操作;反過來,輸入數據要是以從大到小的順序排列,那麼每次比較數字後便都要進行交換。因此,冒泡排序的時間複雜度爲O(n²)。

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