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

728x90

ํ€ต ์ •๋ ฌ

: ํŠน์ • ๊ธฐ์ค€ ์›์†Œ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ, ๊ธฐ์ค€ ์›์†Œ๋ณด๋‹ค ์ž‘์€ ๊ฒƒ๋“ค์€ ๊ธฐ์ค€์˜ ์™ผ์ชฝ์œผ๋กœ, ๊ธฐ์ค€ ์›์†Œ๋ณด๋‹ค ํฐ ๊ฒƒ๋“ค์„ ๊ธฐ์ค€์˜ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ •๋ ฌ + ์žฌ๊ท€์ ์œผ๋กœ ๋ถ„ํ•  ์ •๋ณต ๊ธฐ๋ฒ• ์‚ฌ์šฉ.

๊ฐ€์žฅ ๋„๋ฆฌ ์“ฐ์ด๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๊ธฐ๋„ ํ•˜๋‹ค.

 

ํ•ต์‹ฌ ์›๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Python ์ฝ”๋“œ

 

def quicksort(L):
    if(len(L) == 1) or (len(L) == 0):
        return L
    
    pivot = L[0]
    left = []
    right = []
    
    for x in L[1:]:
        if (x < pivot):
            left.append(x)
        else:
            right.append(x)
    
    return quicksort(left) + [pivot] + quicksort(right)

 

 

 

์œ„์˜ ์ฝ”๋“œ๋Š” ๊ธฐ์ค€ ์ ์„ ์ฃผ์–ด์ง„ ๋ฐฐ์—ด์˜ 0๋ฒˆ์งธ ์ธ๋ฑ์Šค, ์ฆ‰ ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๊ณ ,

ํ•ด๋‹น ๊ธฐ์ค€ ์›์†Œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€ left์—, ํ•ด๋‹น ๊ธฐ์ค€ ์›์†Œ๋ณด๋‹ค ํฐ ๊ฐ’์€ right์— ์ €์žฅํ•œ ํ›„, ์žฌ๊ท€์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ง„ํ–‰ํ•˜๊ณ  ์žˆ๋‹ค.

 

์œ„์˜ ์ฝ”๋“œ๋Š” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ์ด๋‹ค.

left์™€ right ํฌ์ธํ„ฐ 2๊ฐœ๋ฅผ ์ด์šฉํ•ด ํšจ์œจ์ ์œผ๋กœ ํ€ต ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” Python Code๋ฅผ ์ฐธ๊ณ ํ•ด๋ณด์ž.

์ดํ•ด๊ฐ€ ์•ˆ๋œ๋‹ค๋ฉด ๊ทธ ์•„๋ž˜ ํ•œ ๋‹จ๊ณ„ ํ•œ ๋‹จ๊ณ„ ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๋Š”์ง€ ์ง์ ‘ ์†์œผ๋กœ ์จ๋†“์•˜์œผ๋‹ˆ ์ฐธ๊ณ ํ•˜๋ฉด ๋„์›€์ด ๋งŽ์ด ๋  ๊ฒƒ์ด๋‹ค.

 

 

 

from typing import List

def quickSort(data: List[int], left: int, right: int):
    if(left >= right):
        return
    
    pivot = left # ๊ธฐ์ค€๊ฐ’
    pl = left + 1 # pointer_left
    pr = right # pointer_right
    
    while(pl <= pr):
    	# pl๋ฒˆ์งธ ๊ฐ’์ด ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ pl์„ ํ•œ ์นธ์”ฉ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ์ด๋™
        while(pl <= right and data[pl] <= data[pivot]):
            pl += 1
        
        # pr๋ฒˆ์งธ ๊ฐ’์ด ๊ธฐ์ค€๊ฐ’๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ pr์„ ํ•œ ์นธ์”ฉ ์™ผ์ชฝ์œผ๋กœ ์ด๋™    
        while(pr > left and data[pr] >= data[pivot]):
            pr -= 1
        
        # pl์™€ pr๊ฐ€ ์—‡๊ฐˆ๋ ธ๋‹ค๋ฉด ๊ธฐ์ค€๊ฐ’๊ณผ pr ๋ฒˆ์งธ ๊ฐ’์„ swap
        if(pl > pr):
            data[pr], data[pivot] = data[pivot], data[pr]
        
        # pl ๋ฒˆ์งธ ๊ฐ’๊ณผ pr ๋ฒˆ์งธ ๊ฐ’์„ swap, pl๊ณผ pr์€ ๊ทธ๋Œ€๋กœ ์žˆ์Œ. ๊ฐ’์„ ๋ณ€๊ฒฝ!
        else:
            data[pl], data[pr] = data[pr], data[pl]
    	
        # ์žฌ๊ท€์ ์œผ๋กœ ๊ธฐ์ค€ ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์™€, ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•œ๋‹ค.
        quickSort(data, left, pr-1)
        quickSort(data, pr+1, right)
    
    return data

 

 

 

 

[3, 7, 8, 1, 5, 9, 6, 10, 2, 4] ๋ฅผ ํ€ต ์ •๋ ฌํ•˜๋Š” Step by Step์„ ์ž˜ ๋”ฐ๋ผ์™€๋ณด์ž

 

 

 

ํ€ต ์ •๋ ฌ

 

์‹œ๊ฐ„ ๋ณต์žก๋„

 

ํ‰๊ท : O(nlogn)

 

๊ฐ€์žฅ ์ข‹์€ ๊ฒฝ์šฐ: ๊ธฐ์ค€์˜ ์™ผ์ชฝ, ์˜ค๋ฅธ์ชฝ์— ๊ฐ™์€ ์ˆ˜์˜ ์›์†Œ๊ฐ€ ์ด๋™ํ•  ๋•Œ

T(n) = 2*T(n/2) + n

T(n) = O(nlogn)

 

๊ฐ€์žฅ ๋‚˜์œ ๊ฒฝ์šฐ: ๊ธฐ์ค€์˜ ์™ผ์ชฝ ๋˜๋Š” ์˜ค๋ฅธ์ชฝ ํ•œ ์ชฝ์œผ๋กœ๋งŒ ์›์†Œ๊ฐ€ ์ ๋ฆผ

T(n) = T(n-1) + n

T(n) = O(n^2)

 

 

ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(n log n)์ธ ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋ ค๋ฉด ์šฐ์„  ํ€ต ์ •๋ ฌ์˜ ์ž‘๋™ ์›๋ฆฌ์™€ ๋ถ„ํ• -์ •๋ณต(divide-and-conquer) ์ „๋žต์— ๋Œ€ํ•ด ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ€ต ์ •๋ ฌ์€ ๋จผ์ € ๋ฆฌ์ŠคํŠธ๋ฅผ ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋‘ ๊ฐœ์˜ ์ž‘์€ ๋ฆฌ์ŠคํŠธ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ถ„ํ•  ๋‹จ๊ณ„๋ผ๊ณ  ๋ถ€๋ฆ…๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์€ O(n) ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋ฉฐ, n์€ ๋ฆฌ์ŠคํŠธ์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ•œ ๋ฒˆ์”ฉ๋งŒ ๊ฒ€์‚ฌํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

์ดํ›„ ๊ฐ ํ•˜์œ„ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ํ€ต ์ •๋ ฌ์„ ์žฌ๊ท€์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋ถ„ํ• -์ •๋ณต ์ „๋žต์˜ ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค.

์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๊นŠ์ด๋Š” ํ”ผ๋ฒ—์˜ ์„ ํƒ์— ๋”ฐ๋ผ ๊ฒฐ์ •๋˜๋ฉฐ, ์ด๋Š” ์ตœ์„ ์˜ ๊ฒฝ์šฐ์—๋Š” log n์ด ๋ฉ๋‹ˆ๋‹ค. ์ตœ์„ ์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ ๋‹จ๊ณ„์—์„œ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋‘ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ํ•˜์œ„ ๋ฆฌ์ŠคํŠธ๋กœ ๋ถ„ํ• ๋˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.

๋”ฐ๋ผ์„œ, ๊ฐ ๋‹จ๊ณ„์—์„œ O(n)์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์ด๋ฅผ log n ๋‹จ๊ณ„์— ๊ฑธ์ณ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ, ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n log n)์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹จ, ์ด๊ฒƒ์€ ์ตœ์„ ์˜ ๊ฒฝ์šฐ๋‚˜ ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„์ž…๋‹ˆ๋‹ค. ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” ํ€ต ์ •๋ ฌ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2)์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๊ฐ ๋ถ„ํ•  ๋‹จ๊ณ„์—์„œ ํ•˜๋‚˜์˜ ํ•˜์œ„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋นˆ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋˜๊ณ , ๋‹ค๋ฅธ ํ•˜์œ„ ๋ฆฌ์ŠคํŠธ์— ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํฌํ•จ๋˜๋Š” ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ, ํ€ต ์ •๋ ฌ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฒ„๋ธ” ์ •๋ ฌ์ด๋‚˜ ์‚ฝ์ž… ์ •๋ ฌ๊ณผ ๊ฐ™์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ํ”ผ๋ฒ— ์„ ํƒ ์ „๋žต์— ๋”ฐ๋ผ ํฌ๊ฒŒ ํ”ผํ•ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

728x90
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
ยซ   2025/01   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ
250x250