첨부 소스 코드는 나눔고딕코딩 폰트를 사용합니다.
728x90
반응형
728x170

▶ 칵테일 정렬하기 예제

using System;

int[] array = new int[] { 10, 50, 30, 20, 90, 80, 15, 20 };

CocktailSort1<int>(array);

for(int i = 0; i < array.Length; i++)
{
    Console.Write(array[i]);
    Console.Write(" ");
}

 

728x90

 

▶ 칵테일 정렬하기

using System;

#region 칵테일 정렬하기 1 - CocktailSort1<T>(itemArray)

/// <summary>
/// 칵테일 정렬하기 1
/// </summary>
/// <typeparam name="T">항목 타입</typeparam>
/// <param name="itemArray">항목 배열</param>
public void CocktailSort1<T>(T[] itemArray) where T : IComparable
{
    bool swapped;

    do
    {
        swapped = false;

        for(int i = 0; i < itemArray.Length - 1; i++)
        {
            if(itemArray[i].CompareTo(itemArray[i + 1]) > 0)
            {
                T temporaryItem = itemArray[i];

                itemArray[i    ] = itemArray[i + 1];
                itemArray[i + 1] = temporaryItem;

                swapped = true;
            }
        }

        if(!swapped)
        {
            break;
        }

        swapped = false;

        for(int i = 0; i < itemArray.Length - 1; i++)
        {
            if(itemArray[i].CompareTo(itemArray[i + 1]) > 0)
            {
                T temporaryItem = itemArray[i];

                itemArray[i    ] = itemArray[i + 1];
                itemArray[i + 1] = temporaryItem;

                swapped = true;
            }
        }
    }
    while(swapped);
}

#endregion

#region 칵테일 정렬하기 2 - CocktailSort2<T>(itemArray)

/// <summary>
/// 칵테일 정렬하기 2
/// </summary>
/// <typeparam name="T">항목 타입</typeparam>
/// <param name="itemArray">항목 배열</param>
public void CocktailSort2<T>(T[] itemArray) where T : IComparable
{
    bool swapped;
    int  start = (-1);
    int  end   = itemArray.Length - 1;

    do
    {
        swapped = false;

        start++;

        for(int i = start; i < end; i++)
        {
            if(itemArray[i].CompareTo(itemArray[i + 1]) > 0)
            {
                T temporaryItem = itemArray[i];

                itemArray[i    ] = itemArray[i + 1];
                itemArray[i + 1] = temporaryItem;

                swapped = true;
            }
        }

        if(!swapped)
        {
            break;
        }

        swapped = false;

        end--;

        for(int i = end; i >= start; i--)
        {
            if(itemArray[i].CompareTo(itemArray[i + 1]) > 0)
            {
                T temporaryItem = itemArray[i];

                itemArray[i    ] = itemArray[i + 1];
                itemArray[i + 1] = temporaryItem;

                swapped = true;
            }
        }
    }
    while(swapped);
}

#endregion
728x90
반응형
그리드형(광고전용)
Posted by icodebroker

댓글을 달아 주세요