在程序中處理數(shù)據(jù)時,為了提高抗干擾性、過濾掉干擾數(shù)據(jù),我們通常會加入濾波算法,而冒泡排序是最經(jīng)典、通用、易懂的算法。
1. 算法思想簡單描述
冒泡排序要遍歷每一個所要排列的數(shù)據(jù),并且進行兩兩比較,如果順序不對就要對其進行換位,直到排序完成。第一趟:首先比較第1個和第2個數(shù),將小數(shù)放前面,大數(shù)放后面。然后比較第2個數(shù)和第3個數(shù),將小數(shù)放前,大數(shù)放后,如此繼續(xù),直至比較最后兩個數(shù),將小數(shù)放前,大數(shù)放后。重復(fù)第一趟步驟,直至全部排序完成。
想象一下:最小的數(shù)據(jù)元素,就像氣泡一樣慢慢的從底端“浮”到頂端。
2. 算法的簡單演示
舉例說明:要排序數(shù)組矩陣:int[] arr={8,6,9,2};
第一趟排序:
第1次排序:8和6比較,8大于6,交換位置: 6 8 9 2
第2次排序:8和9比較,8小于9,不換位置:8 6 9 2
第3次排序:9和2比較,2小于9,交換位置:8 6 2 9
第一趟總共進行了3次比較, 排序結(jié)果:8 6 2 9
---------------------------------------------------------------------
第二趟排序:
第1次排序:8和6比較,8大于6,交換位置:6 8 2 9
第2次排序:8和2比較,8大于2,交換位置:6 2 8 9
第二趟總共進行了2次比較, 排序結(jié)果:6 2 8 9
---------------------------------------------------------------------
第三趟排序:
第1次排序:6和2比較,6大于2,交換位置:2 6 8 9
第三趟總共進行了1次比較, 排序結(jié)果:2 6 8 9
---------------------------------------------------------------------
最終結(jié)果:2 6 8 9
---------------------------------------------------------------------
由此可見:N個數(shù)字要排序完成,總共進行N-1趟排序,每i趟的排序次數(shù)為(N-i)次,所以可以用雙重循環(huán)語句,外層控制循環(huán)多少趟,內(nèi)層控制每一趟的循環(huán)次數(shù):
for(int i=0;i
for(int j=0;j //省略交換代碼
}
3. 算法代碼展示
void Sort() {
int i,j,temp;
for ( i = 0; i < N - 1; i++) {
for ( j = 0; j < N - 1 - i; j++) {
if (arr[j] > arr[j+1]) { // 相鄰元素兩兩對比
temp = arr[j+1]; // 元素交換
arr[j+1] = arr[j];
arr[j] = temp;
}}}}
圖片來源與互聯(lián)網(wǎng)
以上文章由玩轉(zhuǎn)嵌入式精心原創(chuàng),轉(zhuǎn)載請注明出處,謝謝合作。
更多精彩內(nèi)容請關(guān)注微信公眾號 玩轉(zhuǎn)嵌入式。
免責聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺僅提供信息存儲服務(wù)。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!