標籤:穩定性 font ima form level 最大的 最小 sort 移動
冒泡排序(Bubble Sort),是一種電腦科學領域的較簡單的排序演算法。
演算法原理冒泡排序演算法的運作如下:(從後往前)
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
- 針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
時間複雜度若檔案的初始狀態是正序的,一趟掃描即可完成排序。所需的關鍵字比較次數 和記錄移動次數均達到最小值: , 。所以,冒泡排序最好的時間複雜度為 。若初始檔案是反序的,需要進行n-1 趟排序。每趟排序要進行n-i 次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值: 冒泡排序的最壞時間複雜度為。綜上,因此冒泡排序總的平均時間複雜度為。演算法穩定性 冒泡排序就是把小的元素往前調或者把大的元素往後調。比較是相鄰的兩個元素比較,交換也發生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無聊地把他們倆交換一下的;如果兩個相等的元素沒有相鄰,那麼即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前後順序並沒有改變,所以冒泡排序是一種穩定排序演算法。
|
最差時間複雜度 |
O(n^2) |
|
最優時間複雜度 |
O(n) |
|
平均時間複雜度 |
O(n^2) |
|
最差空間複雜度 |
總共O(n),需要輔助空間O(1) |
1 for (int i = 0; i < arr.Length - 1; i++) 2 { 3 var flag = true; 4 #region 將大的數字移到數組的arr.Length - 1 - i 5 for (int j = 0; j < arr.Length - 1 - i; j++) 6 { 7 if (arr[j] > arr[j + 1]) 8 { 9 temp = arr[j + 1];10 arr[j + 1] = arr[j];11 arr[j] = temp;12 flag = false;13 }14 }15 #endregion16 if (flag)17 {18 break;19 }20 }View Code
演算法 排序(一) 冒泡排序