Skip to content

Latest commit

ย 

History

History
90 lines (71 loc) ยท 4.43 KB

Quick_Sort.md

File metadata and controls

90 lines (71 loc) ยท 4.43 KB

ํ€ต ์ •๋ ฌ (Quick Sort)

ํ€ต ์ •๋ ฌ์€ ๋ณ‘ํ•ฉ์ •๋ ฌ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋ถ„ํ• ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค.
ํ‰๊ท ์ ์œผ๋กœ ๋งค์šฐ ๋น ๋ฅธ ์†๋„๋ฅผ ์ž๋ž‘ํ•˜๋Š” ์ •๋ ฌ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ •๋ ฌ ๊ณผ์ •

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

GIF๋กœ ์ดํ•ดํ•˜๊ธฐ

แ„แ…ฑแ†จแ„Œแ…ฅแ†ผแ„…แ…งแ†ฏ

ํŠน์ง•

  • ๊ณต๊ฐ„ ๋ณต์žก๋„

    • ์ฃผ์–ด์ง„ ๋ฐฐ์—ด ์•ˆ์—์„œ ๊ตํ™˜(swap)์„ ํ†ตํ•ด, ์ •๋ ฌ์ด ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ O(n)์ž…๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„

    • ๋‘ ๊ทธ๋ฃน์œผ๋กœ ๋ถ„ํ• ํ•˜๋Š”๋ฐ O(N)์˜ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ณ  ๋ถ„ํ• ๋œ ๋‹จ๊ณ„๋ฅผ O(logN)๋งŒํผ ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ ํ‰๊ท  ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(NlogN)์ž…๋‹ˆ๋‹ค.
    • ๋ถ„ํ• ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ์ชฝ์œผ๋กœ ๋ชฐ๋ฆฌ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ์—๋Š” O(nยฒ)์ž…๋‹ˆ๋‹ค.

์žฅ์ 

  • ํ‰๊ท  ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ…๋‹ˆ๋‹ค.
    • ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(NlogN)์„ ๊ฐ€์ง€๋Š” ๋‹ค๋ฅธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ๋น„๊ตํ–ˆ์„ ๋•Œ๋„ ๊ฐ€์žฅ ๋น ๋ฆ…๋‹ˆ๋‹ค.
  • ๋ฐฐ์—ด ์•ˆ์—์„œ ์œ„์น˜๋งŒ ๊ตํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๊ธฐ ๋•Œ๋ฌธ์— ์ถ”๊ฐ€์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋‹จ์ 

  • ์ค‘๋ณต๋œ ํ‚ค๊ฐ’์ด ์ˆœ์„œ๋Œ€๋กœ ๋ฐ”๋€Œ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์–ด not-stable(๋ถˆ์•ˆ์ •)ํ•œ ์ •๋ ฌ์ž…๋‹ˆ๋‹ค.
  • ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์—์„œ๋Š” ์˜คํžˆ๋ ค ์ˆ˜ํ–‰์‹œ๊ฐ„์ด ๋” ๋งŽ์ด ๊ฑธ๋ฆฌ๋Š” ๋‹จ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ ์˜ˆ์ œ (Baekjoon)

๋ฐฑ์ค€ - ์ˆ˜ ์ •๋ ฌํ•˜๊ธฐ

๋ฌธ์ œ

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2023-01-18 แ„‹แ…ฉแ„’แ…ฎ 6 01 12

ํ’€์ด

์ž…๋ ฅ ๊ฐ’๋“ค์„ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.
ํ€ต ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜์—ฌ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.

์ฝ”๋“œ(Python)

def quick_sort(arr):
    def sort(low, high):    
        if high <= low:
            return
        mid = partition(low, high)
        sort(low, mid - 1)
        sort(mid, high)

    def partition(low, high):
        pivot = arr[(low + high) // 2]
        while low <= high:
            while arr[low] < pivot:
                low += 1
            while arr[high] > pivot:
                high -= 1
            if low <= high:
                arr[low], arr[high] = arr[high], arr[low]
                low += 1
                high -= 1
        return low

    return sort(0, len(arr) - 1)

n = int(input())
numbers = []

for _ in range(n):
    numbers.append(int(input()))

quick_sort(numbers)

for n in numbers:
    print(n)
  • ๋ฆฌ์ŠคํŠธ์˜ ์ • ๊ฐ€์šด๋ฐ ์žˆ๋Š” ๊ฐ’์„ pivot ๊ฐ’์œผ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์ž‘ ์ธ๋ฑ์Šค(low)๋Š” ๊ณ„์† ์ฆ๊ฐ€์‹œํ‚ค๊ณ , ๋ ์ธ๋ฑ์Šค(high)๋Š” ๊ณ„์† ๊ฐ์†Œ์‹œํ‚ค๊ธฐ ์œ„ํ•œ while๋ฃจํ”„๋ฅผ ๋‘ ์ธ๋ฑ์Šค๊ฐ€ ์„œ๋กœ ๊ต์ฐจํ•ด์„œ ์ง€๋‚˜์น  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ์ž‘ ์ธ๋ฑ์Šค(low)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๊ณผ pivot ๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๋” ์ž‘์€ ๊ฒฝ์šฐ ๋ฐ˜๋ณตํ•ด์„œ ์‹œ์ž‘ ์ธ๋ฑ์Šค ๊ฐ’์„ ์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค. (pivot ๊ฐ’๋ณด๋‹ค ํฐ๋ฐ ์ขŒ์ธก์— ์žˆ๋Š” ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด)
  • ๋ ์ธ๋ฑ์Šค(high)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๊ณผ pivot๊ฐ’์„ ๋น„๊ตํ•ด์„œ ๋” ํฐ ๊ฒฝ์šฐ ๋ฐ˜๋ณตํ•ด์„œ ๋ ์ธ๋ฑ์Šค ๊ฐ’์„ ๊ฐ์†Œ์‹œํ‚ต๋‹ˆ๋‹ค. (pivot ๊ฐ’๋ณด๋‹ค ์ž‘์€๋ฐ ์šฐ์ธก์— ์žˆ๋Š” ๊ฐ’์„ ์ฐพ๊ธฐ ์œ„ํ•ด)
  • ๋‘ ์ธ๋ฑ์Šค๊ฐ€ ์•„์ง ์„œ๋กœ ๊ต์ฐจํ•ด์„œ ์ง€๋‚˜์น˜์ง€ ์•Š์•˜๋‹ค๋ฉด ์‹œ์ž‘ ์ธ๋ฑ์Šค(low)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’๊ณผ ๋ ์ธ๋ฑ์Šค(high)๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐ’์„ ์ƒํ˜ธ ๊ต๋Œ€(swap)์‹œํ‚ต๋‹ˆ๋‹ค. (์ž˜๋ชป๋œ ์œ„์น˜์— ์žˆ๋Š” ๋‘ ๊ฐ’์˜ ์œ„์น˜๋ฅผ ๋ฐ”๊พธ๊ธฐ ์œ„ํ•ด)
  • ์ƒํ˜ธ ๊ต๋Œ€ ํ›„, ๋‹ค์Œ ๊ฐ’์„ ๊ฐ€๋ฆฌํ‚ค๊ธฐ ์œ„ํ•ด ๋‘ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ์ž ์ง„ํ–‰ ๋ฐฉํ–ฅ์œผ๋กœ ํ•œ ์นธ์”ฉ ์ด๋™ ์‹œํ‚ต๋‹ˆ๋‹ค.
  • ๋‘ ์ธ๋ฑ์Šค๊ฐ€ ์„œ๋กœ ๊ต์ฐจํ•ด์„œ ์ง€๋‚˜์น˜๊ฒŒ ๋˜์–ด while ๋ฃจํ”„๋ฅผ ๋น ์ ธ๋‚˜์™”๋‹ค๋ฉด ๋‹ค์Œ ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ๋ถ„ํ•  ๊ธฐ์ค€์ ์ด ๋  ์‹œ์ž‘ ์ธ๋ฑ์Šค๋ฅผ ๋ฆฌํ„ดํ•ฉ๋‹ˆ๋‹ค.

Reference