이제 start부터 right까지 이 과정을 반복하고 left부터 end까지도 이 과정을 반복합니다. 같은 알고리즘의 반복을 구현할 때는 재귀 함수를 이용합니다. 탈출 조건은 start가 end보다 크거나 같아지는 지점입니다. 바로 정렬하려는 데이터가 하나일 때까지 쪼개어(divide) 문제를 해결하는(conquer) 분할 정복 기법이지요.

    코드 15-5 algorithm/algo_3/quick_sort.py ①

    def quick_sort(data, start, end):
        # 탈출 조건
        if start >= end:
            return
    
        left = start
        right = end
        pivot = data[(start + end) // 2]
    
        # left와 right가 교차할 때까지 반복
        def quick_sort(data, start, end):
        while left <= right:
            # left 데이터가 pivot보다 크거나 같으면 멈춥니다
            while data[left] < pivot:
                left+=1
            # right 데이터가 pivot보다 작거나 같으면 멈춥니다
            while data[right] > pivot:
                right-=1
    
            # left와 right가 교차하지 않았다면 교환
            if left <= right:
                data[left], data[right] = data[right], data[left]
                left += 1
                right -= 1
    
        quick_sort(data, start, right)
        quick_sort(data, left, end)
    


    자세한 설명은 주석을 넣어 두었습니다.

    신간 소식 구독하기
    뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.