[알고리즘] Quick Sort(퀵 정렬)

Yoon Uk·2023년 2월 3일
0

알고리즘 - 개념

목록 보기
1/4
post-thumbnail

코드

array = [5, 7, 9, 0, 3, 1, 6, 2, 4, 8]


def quick_sort(array, start_idx, end_idx):
    # 원소가 1개 남았으면 종료
    if end_idx <= start_idx:
        return

    pivot = start_idx
    left_idx = start_idx + 1
    right_idx = end_idx
    # 왼쪽 인덱스가 오른쪽 인덱스 보다 커지면 종료
    while left_idx <= right_idx:
        # 왼쪽 인덱스에 있는 값이 피봇에 있는 값보다 커질 때 까지 왼쪽 인덱스 증가
        # 즉, 피봇에 있는 값보다 큰 값 찾기
        while left_idx <= end_idx and array[left_idx] <= array[pivot]:
            left_idx += 1
        # 오른쪽 인덱스에 있는 값이 피봇에 있는 값 보다 작을 때 까지 오른쪽 인덱스 증가
        # 즉, 피봇에 있는 값보다 작은 값 찾기
        while start_idx < right_idx and array[right_idx] >= array[pivot]:
            right_idx -= 1
        
        # 왼쪽 인덱스와 오른쪽 인덱스가 엇갈리면 오른쪽 인덱스의 값(작은 값)과 피봇값을 교체
        if left_idx > right_idx:
            array[right_idx] , array[pivot] = array[pivot], array[right_idx]
        # 엇갈리지 않았다면 큰 값과 작은 값 교체
        else:
            array[left_idx] , array[right_idx] = array[right_idx], array[left_idx]
    
    # 분할 이후의 왼쪽 부분과 오른쪽 부분에서 각각 정렬 수행
    quick_sort(array, start_idx, right_idx - 1)
    quick_sort(array, right_idx + 1, end_idx)

quick_sort(array, 0, len(array) - 1)
print(array)

0개의 댓글