첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

■ 퀵 정렬하기 예제

------------------------------------------------------------------------------------------------------------------------

using System;

 

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

 

QuickSort<int>(array);

 

for(int i = 0; i < array.Length; i++)

{

    Console.Write(array[i]);

    Console.Write(" ");

}

------------------------------------------------------------------------------------------------------------------------

 

■ 퀵 정렬하기

------------------------------------------------------------------------------------------------------------------------

using System;

 

#region 퀵 정렬하기 - QuickSort<T>(itemArray, leftIndex, rightIndex)

 

/// <summary>

/// 퀵 정렬하기

/// </summary>

/// <typeparam name="T">항목 타입</typeparam>

/// <param name="itemArray">항목 배열</param>

/// <param name="leftIndex">왼쪽 인덱스</param>

/// <param name="rightIndex">오른쪽 인덱스</param>

public void QuickSort<T>(T[] itemArray, int leftIndex, int rightIndex) where T : IComparable

{

    if(rightIndex > leftIndex)

    {

        int pivotIndex    = (leftIndex + rightIndex) / 2;

        int newPivotIndex = Partition(itemArray, leftIndex, rightIndex, pivotIndex);

 

        QuickSort(itemArray, leftIndex        , newPivotIndex - 1);

        QuickSort(itemArray, newPivotIndex + 1, rightIndex       );

    }

}

 

#endregion

 

#region 퀵 정렬하기 - QuickSort<T>(itemArray)

 

/// <summary>

/// 퀵 정렬하기

/// </summary>

/// <typeparam name="T">항목 타입</typeparam>

/// <param name="itemArray">항목 배열</param>

public void QuickSort<T>(T[] itemArray) where T : IComparable

{

    QuickSort(itemArray, 0, itemArray.Length - 1);

}

 

#endregion

 

#region 분리하기 - Partition<T>(itemArray, leftIndex, rightIndex, pivotIndex)

 

/// <summary>

/// 분리하기

/// </summary>

/// <typeparam name="T">항목 타입</typeparam>

/// <param name="itemArray">항목 배열</param>

/// <param name="leftIndex">왼쪽 인덱스</param>

/// <param name="rightIndex">오른쪽 인덱스</param>

/// <param name="pivotIndex">피벗 인덱스</param>

/// <returns>인덱스</returns>

private int Partition<T>(T[] itemArray, int leftIndex, int rightIndex, int pivotIndex) where T : IComparable

{

    T pivotItem     = itemArray[pivotIndex];

    T temporaryItem = itemArray[pivotIndex];

 

    itemArray[pivotIndex] = itemArray[rightIndex];

    itemArray[rightIndex] = temporaryItem;

 

    int storeIndex = leftIndex;

 

    for(int i = leftIndex; i < rightIndex; i++)

    {

        if(itemArray[i].CompareTo(pivotItem) <= 0)

        {

            temporaryItem = itemArray[i];

 

            itemArray[i          ] = itemArray[storeIndex];

            itemArray[storeIndex] = temporaryItem;

 

            storeIndex++;

        }

    }

 

    temporaryItem = itemArray[storeIndex];

 

    itemArray[storeIndex] = itemArray[rightIndex];

    itemArray[rightIndex] = temporaryItem;

 

    return storeIndex;

}

 

#endregion

------------------------------------------------------------------------------------------------------------------------

Posted by 사용자 icodebroker

댓글을 달아 주세요