相鄰元素兩兩比較,順序錯誤即交換,輕元素如氣泡般上浮,重元素下沉。
初始:49, 38, 65, 97, 76, 13, 27, 49
第1趟: 13 上浮至頂端
第2趟: 27 上浮至次頂
...
最終: 13, 27, 38, 49, 49, 65, 76, 97
private static double[] BubbleSort(double[] array, bool ascending)
{
if (array.Length > 0)
{
for (int i = array.Length - 1; i >= 0; i--)
{
for (int j = i - 1; j >= 0; j--)
{
if (CheckCondition(array[i], array[j], ascending))
ExchangeValue(ref array[i], ref array[j]);
}
}
}
return array;
}
private static bool CheckCondition(double a, double b, bool ascending)
{
if (a > b) return ascending; // a>b 時,升序需交換
else return !ascending; // a
| 指標 | 複雜度 |
|---|---|
| 時間 (最好/平均/最差) | O(n) / O(n²) / O(n²) |
| 空間 | O(1) |
| 穩定性 | 穩定 |
Array.Sort (內省排序)