본문 바로가기

Development

퀵 정렬(Quick Sort) 알고리즘의 이해와 C# 구현

안녕하세요! 오늘의 기술 면접 지식은 퀵 정렬(Quick Sort) 알고리즘에 관한 것입니다. 퀵 정렬은 효율적인 정렬 알고리즘 중 하나로, 평균적으로 O(n log n)의 시간 복잡도를 가집니다. 이 포스팅에서는 퀵 정렬의 원리, 시간 복잡도, C#을 사용한 구현 예시에 대해 알아봅니다.

퀵 정렬의 원리

퀵 정렬은 분할 정복(Divide and Conquer) 전략을 사용하는 정렬 알고리즘입니다. 배열에서 하나의 원소를 선택하여 기준(Pivot)으로 삼고, 기준보다 작은 원소들은 왼쪽으로, 큰 원소들은 오른쪽으로 분리합니다. 이 과정을 재귀적으로 반복하여 전체 배열을 정렬합니다.

시간 복잡도

퀵 정렬의 평균 시간 복잡도는 O(n log n)입니다. 최악의 경우 시간 복잡도는 O(n^2)이지만, 이 경우는 드물게 발생합니다. 퀵 정렬은 대부분의 경우에서 빠른 정렬 성능을 제공합니다.

C#을 사용한 퀵 정렬 구현 예시

public static void QuickSort(int[] arr, int low, int high)
{
    if (low < high)
    {
        int pivotIndex = Partition(arr, low, high);
        QuickSort(arr, low, pivotIndex - 1);
        QuickSort(arr, pivotIndex + 1, high);
    }
}

private static int Partition(int[] arr, int low, int high)
{
    int pivot = arr[high];
    int i = low - 1;

    for (int j = low; j < high; j++)
    {
        if (arr[j] <= pivot)
        {
            i++;
            Swap(arr, i, j);
        }
    }
    Swap(arr, i + 1, high);
    return i + 1;
}

private static void Swap(int[] arr, int a, int b)
{
    int temp = arr[a];
    arr[a] = arr[b];
    arr[b] = temp;
}

 

위의 코드는 C#을 사용하여 퀵 정렬 알고리즘을 구현한 예시입니다. 퀵 정렬 함수는 배열과 배열의 시작 인덱스(low) 및 끝 인덱스(high)를 입력받아 배열을 정렬합니다.

 

퀵 정렬 알고리즘을 사용하는 예시:

 

int[] arr = { 9, 7, 5, 11, 12, 2, 14, 3, 10, 6 };
int low = 0;
int high = arr.Length - 1;
QuickSort(arr, low, high);

foreach (int num in arr)
{
    Console.Write(num + " ");
}
// 출력: 2 3 5 6 7 9 10 11 12 14

 

이상으로 퀵 정렬 알고리즘에 대한 기본적인 이해와 C#을 사용한 구현 예시를 살펴봤습니다. 퀵 정렬은 분할 정복 전략을 사용하여 평균적으로 빠른 정렬 성능을 제공하는 알고리즘입니다. 다음 포스팅에서는 또 다른 기술 면접 관련 지식을 다루겠습니다. 기대해주세요!