Quick_sort.md


๊ฐœ๋…

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

ํ”ผ๋ฒ— - Pivot ๋ฆฌ์ŠคํŠธ ์•ˆ์˜ ์ž„์˜์˜ ๊ฐ’, ๋Œ€์ฒด๋กœ ์ฒซ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํ•œ๋‹ค.

๋‹จ๊ณ„

  • ๋ถ„ํ• (Divide) ์ž…๋ ฅ ๋ฐฐ์—ด์„ ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ๋น„๊ท ๋“ฑํ•˜๊ฒŒ 2๊ฐœ์˜ ๋ถ€๋ถ„๋ฐฐ์—ด๋กœ ๋ถ„ํ• 

  • ์ •๋ณต(Conquer)

    • ๋ถ€๋ถ„ ๋ฐฐ์—ด์„ ์ •๋ ฌ

    • ๋ถ€๋ถ„๋ฐฐ์—ด์˜ ํฌ๊ธฐ๊ฐ€ 0์ด๋‚˜ 1์ด ๋ ๋•Œ๊นŒ์ง€ ์ˆœํ™˜ํ˜ธ์ถœ์„ ์ด์šฉํ•˜์—ฌ ๋ถ„ํ•  ์ •๋ณต์„ ์ ์šฉ

  • ๊ฒฐํ•ฉ(Combine) ์ •๋ ฌ๋œ ๋ถ€๋ถ„ ๋ฐฐ์—ด๋“ค์„ ํ•˜๋‚˜์˜ ๋ฐฐ์—ด์— ํ•ฉ๋ณ‘

๐Ÿ˜‰ ์ˆœํ™˜ํ˜ธ์ถœ์ด ํ•œ๋ฒˆ ์ง„ํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ์›์†Œ(ํ”ผ๋ฒ—)๋Š” ์ตœ์ข…์ ์œผ๋กœ ์œ„์น˜๊ฐ€ ์ •ํ•ด์ง€๋ฏ€๋กœ, ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฐ˜๋“œ์‹œ ๋๋‚œ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

ํŠน์ง•

  • ๐Ÿ˜€๋ถ„ํ•  ์ •๋ณต(divide and conquer) ๋ฐฉ๋ฒ•

    • ๋ฌธ์ œ๋ฅผ ์ž‘์€ 2๊ฐœ์˜ ๋ฌธ์ œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๊ฐ๊ฐ์„ ํ•ด๊ฒฐํ•œ ๋‹ค์Œ, ๊ฒฐ๊ณผ๋ฅผ ๋ชจ์•„์„œ ์›๋ž˜์˜ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ์ „๋žต

์˜ˆ์‹œ

quicksort

๊ตฌํ˜„

#์˜ค๋ฆ„์ฐจ์ˆœ
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr) // 2] #๋ฆฌ์ŠคํŠธ์˜ ์ค‘๊ฐ„ ๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์ง€์ •
    low, equal, high = [], [], []
    for i in arr:
        if i > pivot:
            low.append(i):
        elif i < pivot:
            high.append(i):
        else:
            equal.append(i)
    return quick_sort(low) + equal + quick_sort(high)

Last updated