728x90

오늘부터 분할정복 복습에 들어가는데.... 시간이 없어서 간단하게 분할정복의 대장님이신 퀵 정렬만 보려고 한다.

 

분할 정복은 주어진 문제를 둘 이상의 부분 문제로 나눈 뒤 각 문제의 답을 재귀 호출로 계산하고, 다시 각 부분 문제의 답으로 전체 문제의 답을 계산하는 것이다.

 

퀵 정렬에서는 피벗을 기준으로 피벗보다 더 작은 값들의 리스트, 피벗보다 더 큰 값들의 리스트로 분할 한 후, 재귀 호출로 길이가 1이하 가 될 때까지 나누어주고 다시 묶어주는 방식으로 빠르게 정렬해준다.

def quick_sort(data):
    # 데이터의 길이가 1이라면 더이상 정렬할 필요가 없다.
    if len(data) <= 1:
        return data

    pivot = data[0]
    left_data = []
    right_data = []

    for i in data[1:]:
        if i >= pivot:
            right_data.append(i)
        else:
            left_data.append(i)
	
    # 각각 정렬된 값들을 다시 붙이기
    return quick_sort(left_data) + [pivot] + quick_sort(right_data)

오늘은 이만...ㅠㅠ

피곤은 하고... 그렇다고 알고리즘 빼먹을 수는 없어서 이거라도 올립니다!

+ Recent posts