CS/알고리즘

퀵 소트(Quick Sort) 알고리즘 파이썬 예제와 설명

컨설턴트X 2023. 5. 9. 17:46
728x90
반응형

퀵 소트(Quick Sort)는 분할 정복(divide and conquer) 알고리즘을 기반으로 하는 정렬 알고리즘 중 하나입니다. 평균적으로 매우 빠른 수행 시간을 가지고 있어서 실제로도 많이 사용되고 있습니다. 

퀵 소트 알고리즘은 다음과 같은 단계로 구성됩니다.

1. 배열 내에서 특정한 기준값(pivot)을 선택합니다. 대개는 배열의 중간값을 선택하거나, 랜덤하게 선택합니다.
2. 배열을 pivot을 기준으로, 작은 값들은 pivot의 왼쪽에 위치시키고, 큰 값들은 pivot의 오른쪽에 위치시킵니다. 이 과정을 partitioning이라고 부릅니다.
3. pivot을 제외한 왼쪽과 오른쪽 부분 배열에 대해서도 같은 방식으로 partitioning을 수행합니다.
4. 2, 3 과정을 반복적으로 수행하며, 부분 배열의 크기가 1이 될 때까지 진행합니다.

퀵 소트 알고리즘은 재귀 함수를 사용하여 구현할 수 있습니다. 다음은 파이썬으로 구현된 퀵 소트 알고리즘 예제입니다.

def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    
    pivot = arr[len(arr) // 2]
    left = [x for x in arr if x < pivot]
    equal = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    
    return quick_sort(left) + equal + quick_sort(right)



이 코드에서는 배열의 중간값을 pivot으로 선택하고, pivot을 기준으로 왼쪽, 오른쪽, 같은 값들을 각각의 리스트에 저장합니다. 이후 재귀 함수를 사용하여 왼쪽과 오른쪽 부분 배열에 대해서도 같은 방식으로 퀵 소트 알고리즘을 수행하고, 마지막에 리스트들을 합쳐서 반환합니다.

퀵 소트 알고리즘은 평균적으로 O(nlogn)의 시간 복잡도를 가지지만, 최악의 경우 O(n^2)의 시간 복잡도를 가질 수도 있습니다. 이는 pivot값이 최소값이나 최대값인 경우에 발생합니다. 이러한 경우를 방지하기 위해서는 pivot 값을 랜덤하게 선택하거나, 세 값 중 중간값을 선택하는 방법 등을 사용할 수 있습니다.

728x90
반응형