首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 標準冒泡排序實現:優化版含提前終止檢測

     編輯:關於C語言

算法核心

冒泡排序通過相鄰元素比較交換,將大元素逐步「冒泡」到數組末端。優化點:若某輪未發生交換,說明已有序,提前終止。

標準實現


public void BubbleSort(int[] R)
{
    int n = R.Length;
    for (int i = 0; i < n - 1; i++)
    {
        bool exchanged = false;
        // 每輪將最大值推到 n-1-i 位置
        for (int j = n - 2; j >= i; j--)
        {
            if (R[j + 1] < R[j])
            {
                int temp = R[j + 1];
                R[j + 1] = R[j];
                R[j] = temp;
                exchanged = true;
            }
        }
        if (!exchanged) break; // 本輪無交換,已有序
    }
}

關鍵點解析

細節說明
外層循環 i < n-1最多需 n-1 趟,最後一個元素自然就位
內層循環 j >= i已排好序的前 i 個元素無需再比較
exchanged 標志檢測是否已有序,最佳情況 O(n) 提前結束
交換邏輯標準三行交換,臨時變量 temp

複雜度分析

  • 時間:最差 O(n²),最佳 O(n)(已有序),平均 O(n²)
  • 空間:O(1) 原地排序
  • 穩定性:穩定(相等元素不交換)

測試用例


int[] arr = { 64, 34, 25, 12, 22, 11, 90 };
BubbleSort(arr);
// 結果: 11, 12, 22, 25, 34, 64, 90

int[] sorted = { 1, 2, 3, 4, 5 };
BubbleSort(sorted); // 單輪檢測後即 break,極快

面試提示

  • 能手寫正確邊界條件(j >= i 而非 j > i)
  • 說明優化原理與最佳/最差情況
  • 對比插入排序、快速排序優劣
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved