ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90

๐Ÿ’ก How Quicksort Works ?

ํ€ต์ •๋ ฌ์€ ํ”ผ๋ด‡(pivot)์„ ๊ธฐ์ค€์œผ๋กœ ํฐ ์ˆซ์ž์™€ ์ž‘์€ ์ˆซ์ž๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ•œ ๋‹ค์Œ ๋ฐฐ์—ด์„ ๋ฐ˜์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค.

์ฆ‰, ํ”ผ๋ด‡๋ณด๋‹ค ์ž‘์€ ์ˆซ์ž๋Š” ํ”ผ๋ด‡ ์™ผ์ชฝ์œผ๋กœ, ํฐ ์ˆซ์ž๋Š” ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋ถ„ํ• ํ•œ๋‹ค.

์ด๋Ÿฐ์‹์œผ๋กœ ์ญ‰ ๋‚ด๋ ค๊ฐ€๋ฉด ์ •๋ ฌ์ด ๋˜๊ณ , ์ด๋ฅผ ๊ฒฐํ•ฉํ•˜๋ฉด ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ‘ ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ํ‰๊ท ์ ์œผ๋กœ ๋งค์šฐ ๋น ๋ฅธ ์ˆ˜ํ–‰ ์†๋„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ํŠน์ง•์ด๋‹ค.

 

 

์ฝ”๋“œ

def quick_sort(left, right):
    if left >= right:
        return

    pivot = left
    i = left+1
    j = right-1
    while i <= j:
        while i <= j and a[pivot] >= a[i]:
            i += 1
        while i <= j and a[pivot] <= a[j]:
            j -= 1

        if i <= j:
            a[i], a[j] = a[j], a[i]

    a[pivot], a[j] = a[j], a[pivot]

    quick_sort(left, j)
    quick_sort(j+1, right)


T = int(input())
for tc in range(1, T + 1):
    N = int(input())
    a = list(map(int, input().split()))

    quick_sort(0, len(a))
    print("#{} {}".format(tc, a[N//2]))

 

๋Œ“๊ธ€