Algorithm/SW Expert Academy

[Python] 5205. 퀵 정렬

느낌표 공장장 2021. 10. 7. 23:27
def partition(l, r):
    p = arr[l]      # 피봇 설정
    i, j = l, r
    while i <= j:   # 왼쪽과 오른쪽이 만나기 전까지
        while i <= j and arr[i] <= p:   # p보다 큰 값을 만날때까지 오른쪽으로 이동
            i += 1
        while i <= j and arr[j] >= p:   # p보다 작은 값을 만날 때까지 왼쪽으로 이동
            j -= 1
        if i < j:   # i, j 정해졌다면
            arr[i], arr[j] = arr[j], arr[i] # 교환
    arr[l], arr[j] = arr[j], arr[l] # 작은 값 피봇과 교환
    return j    # 파티션이 끝난 후 피봇 위치


def quick_sort(l, r):
    if l < r:
        s = partition(l, r) # 분할
        quick_sort(l, s-1)
        quick_sort(s+1, r)


for idx in range(1, int(input())+1):
    n = int(input())
    arr = list(map(int, input().split()))

    quick_sort(0, len(arr)-1)
    print('#{} {}'.format(idx, arr[n//2]))

'Algorithm > SW Expert Academy' 카테고리의 다른 글

[Python] 5208. 전기버스2  (0) 2021.10.07
[Python] 5207. 이진탐색  (0) 2021.10.07
[Python] 5204. 병합 정렬  (0) 2021.10.07
[Python] 5203. 베이비진 게임  (0) 2021.10.05
[Python] 5202. 화물도크  (0) 2021.10.05