首頁

目前文章總數:157 篇

  

最後更新:2024年 12月 07日

0004. 雞尾酒排序法(Cocktail Sort)-穩定排序

日期:2023年 02月 26日

標籤: Algorithm Sort Paractical Algorithm C# Asp.NET Core

摘要:演算法-排序


時間複雜度(Time Complex): O(n^2)
空間複雜度(Space Complex): O(1)
最佳時間: O(n)
最壞時間: O(n^2)
範例檔案:Source Code
範例專案:Code Project
基本介紹:本篇分為3大部分。
第一部分:雞尾酒排序 - 介紹
第二部分:圖解範例說明
第三部分:代碼






第一部分:雞尾酒排序 - 介紹

Step 1:原理:又名(攪拌排序)

像是攪拌依一樣,由最左再往最右邊,並且依照以下規則
1. 往右時,將最大值放到最右邊,並且最右上限-1
2. 然後再往左,將最小值放到最左邊,並且最左上限+1
3. 重複1、2直到左與右相重疊時,表示跑完
最後排序將會由小至大

Step 2:演算法流程圖




第二部分:圖解範例說明

Step 1:以整數陣列為例

初始內有5個值,依序左、右、左、右、完成排序





第三部分:代碼

Step 1:雞尾酒排序代碼 - 呼叫進入點

輸入一組數列 inputItem 求出 result


public void Execute()
{
    List<int> inputItem = new() { 92, 17, 38, 59, 26, 39 };
    var cocktailSort = new CocktailSort<int>();
    var result = cocktailSort.CocktailAscsendingSorting(inputItem);
}



Step 2:雞尾酒排序代碼 - 主程式

主要四個流程
1. 輸入一組比較陣列Array[]
2. 由陣列最左邊元素取最大值放置最右邊
3. 由陣列最右邊元素取最小值放置最左邊
4. 直到到中心點,結束排序


public class CocktailSort<T> where T : IComparable
{
    public List<T> CocktailAscsendingSorting(List<T> items)
    { 
        int right = items.Count - 1;
        int left = 0;
        T temp;
        while (left < right)
        {
            //往右 - 取大
            for (int index = left; index < right; index++)
            {
                if (items[index].CompareTo(items[index + 1]) > 0)
                {
                    temp = items[index];
                    items[index] = items[index + 1];
                    items[index + 1] = temp;
                }
            
            }
            right--;
            //往左 - 取小
            for (int index = right; index > left; index--)
            {
                if (items[index].CompareTo(items[index - 1]) < 0)
                {
                    temp = items[index];
                    items[index] = items[index - 1];
                    items[index - 1] = temp;
                }
            }
            left++;
        }
        return items;
    }
}