冒泡排序——學習的第1個排序算法(java實現)

說在前面

除了時間、空間複雜度之外,排序算法還有另外兩個概念:
原地排序:是指空間複雜度爲O(1)的排序算法;
穩定排序(排序的穩定性):是指在待排序序列中存在相等值,經過排序後,相等值之間的原有順序不變,即是穩定排序;

冒泡排序

思路

  • 包含兩個操作原子,比較交換,可以理解一次冒泡就是一輪比較和交換;
  • 一次冒泡至少移動一個元素到應該在的位置,每次冒泡結束,下次冒泡的元素個數減1;
  • 冒泡只操作相鄰的兩個數據,每次冒泡不停地對相鄰的兩個元素進行比較,滿足大小要求就進行交換,重複n次完成n個數據的排序;
  • **優化:**當某次冒泡過程中沒有發過數據交換,說明序列已經達到完全有序,不需要再繼續後續的冒泡操作,重複次數就小於n;

實現

public void bubbleSort(int[] a,int n){
	if(n<=1){
		return;
	}
	for(int i=0;i<n;i++){
		//是否提前完成 默認爲true,當冒泡過程中出現交換則設爲false
		boolean isFinished=true;

		//冒泡
		for(int j=0;j<n-1-i;j++){
			if(a[j]>a[j+1]){
				//符合大小關係,從小到大,交換
				int tmp = a[j];
				a[j] = a[j+1];
				a[j+1] = tmp;
				//有交換操作說明未完成排序
				isFinished = false;
		}
		
		if(isFinished){
			//某次冒泡過程中沒有交換操作,則提前退出不再執行後續冒泡
			break;
		}
	}
}

熄燈

冒泡排序

  • 是穩定排序
  • 是原地排序
  • 最好O(1),最壞O(n2),平均O(n2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章