1. 程式人生 > 實用技巧 >NH.A.0001__zabbix_lamp+zabbxix.server/zabbix.agent.yum源安裝_V2020.10.22

NH.A.0001__zabbix_lamp+zabbxix.server/zabbix.agent.yum源安裝_V2020.10.22

氣泡排序

什麼是氣泡排序

氣泡排序(Bubble Sort)是一種典型的交換排序演算法,通過交換資料元素的位置進行排序

原理

比較兩個相鄰的元素,將值大的元素交換至右端(以從小到大排序為例),動態效果如下圖:

舉例說明(從小到大排序為例,刪除線標識的是相互比較的兩個數)

最初的陣列 【1,5,4,7,3】

第一輪排序:

15,4,7,3】變為【1,5,4,7,3】

【1,54,7,3】變為【1,4,5,7,3】

【1,4,57,3】變為【1,4,5,7,3】

【1,4,5,73】變為【1,4,5,3,7】


一輪排序後 【1,4,5,3,7】

第二輪比較:

14

,5,3,7】變為【1,4,5,3,7】

【1,45,3,7】變為【1,4,5,3,7】

【1,4,53,7】變為【1,4,3,5,7】


二輪排序後 【1,4,3,5,7】

第三輪排序:

14,3,5,7】變為【1,4,3,5,7】

【1,43,5,7】變為【1,3,4,5,7】


三輪排序後 【1,3,4,5,7】

第四輪排序:

13,4,5,7】變為【1,3,4,5,7】

程式碼

public class BubbleSort{
	public int[] bubbleSort(int[] arr){
		// 外層迴圈
		for(int i = 0; i < arr.length; 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;
				}
			}
		}
		return arr;
	}		
}

程式碼理解:“N個數字要排序完成,總共進行N-1趟排序,每i趟的排序次數為(N-i)次,外層迴圈控制比較輪數,內層迴圈控制每輪比較次數。“對於這種說法,沒問題,但我個人覺得就是你知道氣泡排序什麼原理再去看這句話沒問題,但你如果從這句話去理解氣泡排序容易造成混亂。這句話可以作為你你記憶和檢驗程式碼的一個依據,理解的話還是從原理出發。

思路:【1️⃣2️⃣3️⃣4️⃣5️⃣】程式碼就是要實現這個原理,先寫內部迴圈,就寫第一次排序,怎麼依次進行相鄰元素比較,然後大的向右移動,然後在寫外部迴圈,結合內部迴圈怎麼滿足上面說的這種效果。

總結

(從小到大排序為例)其實每一輪排序都是從開始然後相鄰元素兩兩比較,大的右移,直到最大一個數冒出,只不過每一輪比較之後,下一輪比較都會少一個元素進行比較,因為第一輪當中兩兩比較,確定出最大數,然後第二輪就不用再讓最大數參與比較了,因為已經確定最大數是誰了,只需要比較其他元素就可以了,同理第二輪比較可以確定一個第二大的數,一次迴圈下去就可以確定第三大,第四大,第五大......進而排序完成。

參考資料

https://www.cnblogs.com/onepixel/p/7674659.html

https://www.cnblogs.com/zxfei/p/10706965.html

https://www.cnblogs.com/bigdata-stone/p/10464243.html