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

C# 實作雞尾酒排序演算法

     編輯:關於C#

演算法簡介

雞尾酒排序,又稱雙向氣泡排序、攪拌排序 或漣漪排序,是氣泡排序的改良版。標準氣泡排序單向掃描(由小到大),每輪只能將最大值移至末端;雞尾酒排序則雙向交替掃描:先由左往右將最大值「冒泡」到右端,再由右往左將最小值「下沉」到左端。如此可減少約一半的掃描輪數,效能略優於單向氣泡排序(但仍屬 O(n²),僅適合小規模資料教學用途)。

完整實作代碼

using System;

namespace SortingAlgorithms
{
    public static class CocktailSorter
    {
        public static int[] Sort(int[] array)
        {
            if (array == null || array.Length < 2) return array;
            CocktailSort(array);
            return array;
        }

        private static void CocktailSort(int[] arr)
        {
            int low = 0;
            int up = arr.Length - 1;
            int lastSwap = low;

            while (up > low)
            {
                // 正向掃描:將最大值移到 up
                for (int i = low; i < up; i++)
                {
                    if (arr[i] > arr[i + 1])
                    {
                        Swap(ref arr[i], ref arr[i + 1]);
                        lastSwap = i;
                    }
                }
                up = lastSwap; // 縮小右邊界

                // 反向掃描:將最小值移到 low
                for (int i = up; i > low; i--)
                {
                    if (arr[i] < arr[i - 1])
                    {
                        Swap(ref arr[i], ref arr[i - 1]);
                        lastSwap = i;
                    }
                }
                low = lastSwap; // 縮小左邊界
            }
        }

        private static void Swap(ref int a, ref int b)
        {
            int tmp = a; a = b; b = tmp;
        }
    }
}

運作流程圖解

假設陣列 [5, 1, 4, 2, 8, 3]:

  1. 第 1 輪正向: 5↔1, 5↔4, 5↔2, 8↔3 → [1, 4, 2, 5, 3, 8],up=4
  2. 第 1 輪反向: 3↔5, 2↔4 → [1, 2, 4, 3, 5, 8],low=1
  3. 第 2 輪正向: 4↔3 → [1, 2, 3, 4, 5, 8],up=2
  4. 第 2 輪反向: 無交換 → low=2,結束

效能與適用性分析

指標氣泡排序雞尾酒排序
時間複雜度 (平均/最差)O(n²)O(n²)
時間複雜度 (最佳,已排序)O(n)O(n)
空間複雜度O(1)O(1)
穩定性穩定穩定
實際交換次數較多約減少 30~40%

結論: 雞尾酒排序在「接近有序」資料上表現較好,但對大量資料仍不如 QuickSort、MergeSort 或 .NET 內建 Array.Sort (Introspective Sort)。僅建議用於教學、極小陣列(<50 元素)或嵌入式環境無法使用標準庫時。

參考資源

原文連結:https://www.bianceng.cn/Programming/csharp/201410/45749.htm

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved