這通過使用標誌位進行實現:
for (int i = 0, len = arr.length; i < arr.length; i++)
}if(!haschanged) break;
}
void sort(...)}}
}
下面進行舉例:
如:1 3 5 9 2 6 7 10
第一輪,lastex = length - 1 = 7;
,此時 i 從 i = lastex = 7 迴圈到i=0 ;
, j 從 j = 0 迴圈到 length - i - 1 ,
,第一輪 j 的迴圈走完時,陣列變成了1 3 5 2 6 7 9 10
,此時 lastex = 6
第二輪,
此時 lastex = 6, i = 6 ; 注意:此時只是完成了第二層迴圈的一輪
外層迴圈為 : i = 6 到i = 0, 注意,這裡要將lastex的值賦值給 i ,這樣才可以起到減少外層迴圈的次數
內層迴圈第二輪時,當 5 和 2 交換之後便不再交換,所以此時 lastex = 2,陣列變成了1 3 2 5 6 7 9 0
第三輪此時 外層迴圈的i 已經通過lastex的賦值降成了2,大大減少了外層迴圈的次數
第三輪,將是 3 與 2 進行交換,lastex = 1;
陣列已經有序
優化之後的,通過列印 交換次數和 比較次數
1,本文優化1 交換次數 5 ,比較次數 24
2,本文優化2 交換次數 5 , 比較次數 15
3,常見冒泡 交換次數 5, 比較次數 28
C 氣泡排序 氣泡排序的優化
本文包含氣泡排序的三種實現方式 分別為氣泡排序初級版,公升級版,終級版 自己起的名字 使用時只要使用終極版就本以了,終級版為公升級版的優化版本 至於初極版和公升級版只是為了幫助理解 氣泡排序的時間複雜度為o n include include include include include incl...
氣泡排序以及氣泡排序的優化
很早接觸過氣泡排序法,但一直沒有真正的理解,只是為了記住而學習,今天又重新看了一下,其實氣泡排序法第一次排序會把最大的冒到最上面,第二次會把次大的泡冒到最大的後面,一次類推 另外在排序的次數上會逐漸減少。看 void bubble sort int a,int n 其實還可以優化一下,當發現沒有進行...
氣泡排序 優化後的氣泡排序
氣泡排序法 演算法原理 依次比較相鄰兩個元素的大小,若後面的比前面的小,則交換兩個元素的位置 對每一對相鄰元素作同樣的工作,從第一對到最後一對。進行一輪比較交換下來,最後的元素就會是最小的數了,這個數就不用參與後面的比較操作了 思路 遍歷陣列,對陣列中相鄰的兩個元素進行比較,如果需要公升序,前乙個資...