๊ธ€ ์ž‘์„ฑ์ž: ๊ฐœ๋ฐœํ•˜๋Š” ํ›ˆ์ด

ํ€ต์†ŒํŠธ

ํ€ต ์ •๋ ฌ์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ถ„ํ• ์ •๋ณต์˜ ์„ฑ๊ฒฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ  ์‹ค์ œ๋กœ๋„ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋Œ€ํ‘œ์ ์ธ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋™์‹œ์— ์ž๋ฃŒ๊ตฌ์กฐ ์ˆ˜๊ฐ•์ƒ๋“ค์„ ๊ดด๋กญ๊ฒŒ ํ•˜๋Š” ์นœ๊ตฌ ์ค‘ ํ•œ๋ช…์ด๊ธด ํ•˜์ง€๋งŒ..

Algorithm Concept

ํ€ต ์ •๋ ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ณผ์ •์œผ๋กœ ์ •๋ ฌ์„ ์ง„ํ–‰ํ•œ๋‹ค. ์ •๋ ฌ์€ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž.

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

์ด ๊ณผ์ •์€ ๋ถ„ํ•  ์ •๋ณต์˜ ์›๋ฆฌ๋ฅผ ์ด์šฉํ•œ ๊ฒƒ์ด๋‹ค. ํ”ผ๋ฒ—์„ ์ค‘์‹ฌ์œผ๋กœ ๋ฌธ์ œ๋ฅผ ๋ถ„ํ•  ํ•˜๊ณ , ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ํ•ด์„œ ์ž‘์€ ๊ฐ’๊ณผ ํฐ ๊ฐ’์„ ๋‚˜์—ดํ•˜๋Š” ์ •๋ณต ๊ณผ์ •์„ ๊ฑฐ์นœ ๋’ค, ๋ชจ๋“  ๊ฒฐ๊ณผ๋ฅผ ๊ฒฐํ•ฉ ํ•ด์„œ ํฐ ์ „์ฒด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.

Pivot Selection

ํ€ต์ •๋ ฌ์—์„œ ๊ฐ€์žฅ ํ•ต์‹ฌ์ด ๋˜๋Š” ๋ถ€๋ถ„์€ ์–ด๋–ป๊ฒŒ pivot์„ ์„ ์ •ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ๋ถ€๋ถ„์ด๋‹ค. ํ€ต์ •๋ ฌ์˜ ์ตœ์•…์˜ ๊ฒฝ์šฐ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(N2) ์ด๊ณ  ํ‰๊ท  ๋ณต์žก๋„๋Š” ๐›ฉ(NlogN) ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ”ผ๋ฒ—๊ฐ’์„ ์ž˜๋ชป ์„ ์ •ํ•˜๋ฉด ๋ฒ„๋ธ”์†ŒํŠธ๋‚˜ ๋‹ค๋ฆ„์—†๋Š” ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค.

ํ”ผ๋ฒ—์— ๋”ฐ๋ผ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ ๊ทน๊ณผ๊ทน์ธ ์ด์œ ๋Š” ํ”ผ๋ด‡์„ ํ†ตํ•ด ๋‚˜๋ˆ„๋Š” ๋ฐฐ์—ด์˜ ์œ„์น˜ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด๋‚˜ ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด๋•Œ ๊ฐ€์žฅ ์ฒ˜์Œ๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์‚ผ๊ฒŒ๋˜๋ฉด ํ€ต์†ŒํŠธ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ง„ํ–‰๋œ๋‹ค.

  1. | 1 | 2 | 3 | 4 | 5 | ์ด๋Ÿฐ ๋ฐฐ์—ด์ด ์žˆ์„๋•Œ, 1์„ ํ”ผ๋ฒ—์œผ๋กœ ์„ ํƒํ•˜๊ฒŒ ๋˜๋ฉด,
  2. 1์„ ๊ธฐ์ค€์œผ๋กœ 1๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€ ๋ชจ๋‘ ์™ผ์ชฝ์— ๋‘๊ณ  ํฐ ๊ฐ’์€ ๋ชจ๋‘ ์˜ค๋ฅธ์ชฝ์— ๋‘์–ด์•ผ ํ•˜๋Š”๋ฐ, 1๋ณด๋‹ค ์ž‘์€ ๊ฐ’์€ ์—†๊ธฐ ๋•Œ๋ฌธ์—, 5๋ถ€ํ„ฐ 2๊นŒ์ง€ ๋‚ด๋ ค์˜ค๋ฉด์„œ 1๊ณผ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ด n-1๋ฒˆ ์ˆ˜ํ–‰๋œ๋‹ค.
  3. ์ฒซ ๋ถ„ํ• ์ด ๋๋‚˜๊ณ  ๋‚˜๋ฉด ๋‹ค์Œ ํ”ผ๋ฒ—์€ 2๋กœ ์ง€์ •์ด ๋ ํ…๋ฐ ์ด ๋•Œ ์—ญ์‹œ ๋น„๊ตํ•˜๋Š” ์—ฐ์‚ฐ์ด n-1๋ฒˆ ์ˆ˜ํ–‰๋œ๋‹ค.
  4. ๋”ฐ๋ผ์„œ ํ”ผ๋ฒ—์ด n์— ๋„๋‹ฌํ• ๋•Œ๊นŒ์ง€ ๋น„๊ต์—ฐ์‚ฐ์ด ๊ณ„์† ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” n-1 * n ์ด ๋˜์–ด์„œ O(N^2) ๊ฐ€ ๋˜๊ฒŒ๋œ๋‹ค.

๋ฐ˜๋ฉด์— ๋ฐฐ์—ด์ด ์ •ํ™•ํ•˜๊ฒŒ ํ˜น์€ ๊ฑฐ์˜ ๊ทผ์‚ฌํ•˜๊ฒŒ ๋ฐ˜์œผ๋กœ ๊ณ„์† ๋‚˜๋‰˜์–ด์ง„๋‹ค๋ฉด ๋ฐฐ์—ด์˜ ์š”์†Œ ๊ฐฏ์ˆ˜๋กœ ๋งŒ๋“ค์–ด์ง€๋Š” ์™„์ „์ด์ง„ํŠธ๋ฆฌ์˜ ๋†’์ด์ธ log n ์— ๋Œ€ํ•ด ๋น„๊ต์—ฐ์‚ฐ์ด n๋ฒˆ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๐›ฉ(nlogn) ์ด ๋œ๋‹ค.

์ด๋Ÿฐ ๋ฌธ์ œ์ ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ํ€ต์†ŒํŠธ๊ฐ€ ์—ฌ์ „ํžˆ ๋น ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ธ์ •๋ฐ›๋Š” ์ด์œ ๋Š” ์™„์ „ํžˆ ์ •๋ ฌ๋œ ๋ฐฐ์—ด์— ๋Œ€ํ•ด ํ€ต์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋งค์šฐ ์ ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ํ”ผ๋ด‡์„ ์–ด๋–ป๊ฒŒ ์ •ํ•ด์•ผ์ง€ ์ตœ๋Œ€ํ•œ ์„ฑ๋Šฅ์„ ๋Œ์–ด์˜ฌ๋ฆด ์ˆ˜ ์žˆ์„๊นŒ? ์ผ๋ฐ˜์ ์œผ๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ›๋Š” ๋ฐ์ดํ„ฐ์˜ ๋‚ด๋ถ€ ์š”์†Œ๋“ค์ด ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ์ง€ ๋ชปํ•œ์ฑ„๋กœ ์ •๋ ฌ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๋”ฐ๋ผ์„œ ์•„๋ฌด๋ฆฌ ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ ์ผ์–ด๋‚œ ํ™•๋ฅ ์ด ์ ๋‹ค๊ณ  ํ•ด๋„ ํ”ผ๋ด‡์„ ์ž˜ ์„ ์ •ํ•ด์„œ ์ตœ์•…์˜ ๊ฒฝ์šฐ๋ฅผ ํ”ผํ•˜๋Š” ๊ฒƒ์€ ํ•„์š”ํ•  ๊ฒƒ์ด๋‹ค. ํ”ผ๋ด‡์˜ ์„ ์ •์€ ๋Œ€ํ‘œ์ ์œผ๋กœ ์„ธ ๊ฐœ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  1. ์ฒซ๋ฒˆ์งธ ๊ฐ’์ด๋‚˜ ๋งˆ์ง€๋ง‰ ๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์„ ์ •ํ•œ๋‹ค.
  2. ์ฒซ๋ฒˆ์งธ ๊ฐ’, ๊ฐ€์šด๋ฐ ๊ฐ’, ๋งˆ์ง€๋ง‰ ๊ฐ’ ์ค‘์— ์ค‘๊ฐ„๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์„ ์ •ํ•œ๋‹ค.(Median of Three)
  3. ๋ฌด์ž‘์œ„ ๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์„ ์ •ํ•œ๋‹ค.

Median of Three ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์˜ ๋ถ„ํ• ์ด ๊ฑฐ์˜ ์ด๋“ฑ๋ถ„์œผ๋กœ ์œ ์ง€๊ฐ€ ๋  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฐฉ๋ฒ•์ด ๊ฐ€์žฅ ์ข‹์€ ํ”ผ๋ฒ— ์„ ์ •๋ฒ•์ด๋ผ๊ณ  ์•Œ๋ ค์ ธ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ํฌ์ŠคํŠธ์—์„œ๋Š” ํ€ต์†ŒํŠธ์˜ ์›๋ฆฌ์™€ ๊ณผ์ •์„ ์ดํ•ดํ•˜๊ธฐ ๊ฐ€์žฅ ์šฉ์ดํ•œ ์ฒซ๋ฒˆ์งธ ๊ฐ’์„ ํ”ผ๋ฒ—์œผ๋กœ ์„ ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ์„ค๋ช…์„ ์ด์–ด๊ฐ€๋„๋ก ํ•˜๊ฒ ๋‹ค.

Example

ํ€ต์†ŒํŠธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

Phase 1

์ผ๋‹จ ํ”ผ๋ด‡์„ ์„ ์ •ํ•˜๊ณ  ํ”ผ๋ฒ—๋ณด๋‹ค ๋” ์ž‘์€๊ฐ’๊ณผ ๋” ํฐ ๊ฐ’์„ ํƒ์ƒ‰ํ•  low ์™€ high ๋ฅผ ํ”ผ๋ฒ—์„ ์ œ์™ธํ•œ ๋ฐฐ์—ด์˜ ์–‘๋์ ์— ๋‘”๋‹ค.

Phase 2

๋จผ์ € low๋ฅผ ๊ณ„์† ์›€์ง์ด๋ฉด์„œ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๊ฒ€์‚ฌํ•ด๋ณด์ž. ํ•œ์นธ ์ด๋™ํ–ˆ์„ ๋•Œ low๋Š” ๋ฐฐ์—ด์š”์†Œ 9๋ฅผ ๋งŒ๋‚˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๊ฐ’์€ ํ”ผ๋ฒ—๊ฐ’์ธ 5๋ณด๋‹ค ํฐ ๊ฐ’์ด๋‹ค. low์˜ ๋’ค์—๋Š” ํ•ญ์ƒ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ์„œ ์ผ๋‹จ ๋ฉˆ์ถ˜๋‹ค.

Phase 3

low๊ฐ€ ๋ฉˆ์ถ”๋ฉด high๋ฅผ ์›€์ง์ธ๋‹ค. high๋ฅผ ํ•œ์นธ ์˜ฎ๊ธฐ๋ฉด ๋ฐฐ์—ด ์š”์†Œ 1์— ๋„์ฐฉํ•˜๊ฒŒ ๋˜๋Š”๋ฐ ์ด ๊ฐ’์€ ํ”ผ๋ฒ—๊ฐ’์ธ 5๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— high์˜ ์˜์—ญ์— ์žˆ์œผ๋ฉด ์•ˆ๋œ๋‹ค. high ๋„ ์—ฌ๊ธฐ์„œ ์ผ๋‹จ ์ •์ง€์‹œํ‚จ๋‹ค.

Phase 4

low ์™€ high๊ฐ€ ๋ชจ๋‘ ์ค‘๋‹จ๋˜๋ฉด ์ค‘๋‹จ๋œ ์œ„์น˜๋ฅผ ๋จผ์ € ํ™•์ธํ•ด๋ณธ๋‹ค. ๋งŒ์•ฝ low ์™€ high๊ฐ€ ์„œ๋กœ ์œ„์น˜๊ฐ€ ์—ญ์ „๋œ ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ์ค‘๋‹จ๋œ ์ง€์ ์— ์žˆ๋˜ ๋‘ ์š”์†Œ๋ฅผ ๊ตํ™˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ 1๊ณผ 9๊ฐ€ ๊ตํ™˜๋˜์—ˆ๋‹ค.

Phase 5

๋‹ค์‹œ low๋ฅผ ์ด๋™์‹œํ‚จ๋‹ค. ์ด๋ฒˆ์—๋„ ์—ญ์‹œ ํ™•์ธํ•œ ๋ฐฐ์—ด์š”์†Œ๊ฐ€ ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋‹จํ•œ๋‹ค.

Phase 6

์ด์ œ high ๋ฅผ ์ด๋™์‹œํ‚ค์ž. high๋„ ์ƒˆ๋กœ ๊ฒ€์‚ฌํ•œ ๋ฐฐ์—ด์˜ ์š”์†Œ๊ฐ€ ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ˜„ ์œ„์น˜์—์„œ ์ค‘๋‹จํ•œ๋‹ค.

Phase 7

low ์™€ high ๊ฐ€ ์•„์ง ๊ต์ฐจํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋‘ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๊ตํ™˜ํ•œ๋‹ค.

Phase 8

low๊ฐ€ ํ•œ๋ฒˆ ๋” ์ด๋™ํ•˜๋ฉด ํ”ผ๋ฒ—๋ณด๋‹ค ํฐ ๊ฐ’์„ ๋งŒ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์‹œ ๋˜ ์ค‘๋‹จํ•˜๊ฒŒ ๋œ๋‹ค.
high๋„ ํ•œ๋ฒˆ ๋” ์ด๋™ํ•˜๋ฉด ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘์€ ๊ฐ’์„ ๋งŒ๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋‹จํ•˜๊ฒŒ ๋œ๋‹ค.

์ด๋ฒˆ ๊ฒฝ์šฐ์—๋Š” low์™€ high์˜ ์œ„์น˜๊ฐ€ ์—ญ์ „๋๊ธฐ ๋•Œ๋ฌธ์— ๊ตํ™˜๋˜์ง€ ์•Š๊ณ  ์ •๋ ฌ์„ ๋๋‚ธ๋‹ค.

Phase 9

1์ฐจ๋กœ ์ •๋ ฌ์ด ๋๋‚˜๋ฉด ํ”ผ๋ฒ—์œผ๋กœ ์„ค์ •๋œ ๋ฐฐ์—ด์š”์†Œ๋ฅผ high๊ฐ€ ๊ฐ€๋ฅดํ‚ค๋Š” ๋ฐฐ์—ด์š”์†Œ์™€ ๊ตํ™˜ํ•ด์ค€๋‹ค. ์ด์ œ ํ”ผ๋ฒ—์„ ์ค‘์‹ฌ์œผ๋กœ ์™ผ์ชฝ๊ณผ ์˜ค๋ฅธ์ชฝ์— ํ”ผ๋ฒ—๋ณด๋‹ค ์ž‘๊ณ  ํฐ ๊ฐ’๋“ค์ด ์œ„์น˜ํ–ˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

More...

ํ”ผ๋ฒ—์„ ์ค‘์‹ฌ์œผ๋กœ ๋‚˜๋‰˜์–ด์ง„ ๋‘ ๊ทธ๋ฃน์€ ๋‘ ๊ฐœ์˜ ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์ทจ๊ธ‰๋˜์–ด์„œ ์œ„์—์„œ ๊ฑฐ์ณค๋˜ ๊ณผ์ •์„ ๋˜‘๊ฐ™์ด ๊ฑฐ์น  ์ˆ˜ ์žˆ๋‹ค. low๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ๊ทธ๋ฃน์˜ ํ”ผ๋ฒ—์€ 3์ด ๋  ๊ฒƒ์ด๊ณ , high ๊ฐ€ ๋งŒ๋“ค์–ด๋‚ธ ๊ทธ๋ฃน์˜ ํ”ผ๋ฒ—์€ 7์ด ๋  ๊ฒƒ์ด๋‹ค. ์ด ์ž‘์—…์„ ๋ถ„ํ• ๋œ ๋ฐฐ์—ด์˜ ๊ธธ์ด๊ฐ€ 1์ด๋‚˜ 0์ด ๋  ๋•Œ๊นŒ์ง€ ๊ณ„์† ๋ฐ˜๋ณตํ•œ๋‹ค.

Implementation

#include <stdio.h>

int partition (int arr[], int p, int r){
    int low, high;
    int pivot = arr[p]; // pivot ๊ฐ’ ์„ค์ •

    low = p + 1; // low ๋Š” pivot์˜ ๋ฐ”๋กœ ๋‹ค์Œ ์œ„์น˜์—์„œ๋ถ€ํ„ฐ
    high = r; // high๋Š” ์ „๋‹ฌ๋œ ๋์ง€์ 

    while(low <= high){
        while(arr[low] < pivot) low++; // pivot ๋ณด๋‹ค ์ž‘์€ ๊ฐ’์ด ๋‚˜์˜ฌ๋•Œ๋งˆ๋‹ค ์ด๋™
        while(arr[high] > pivot) high--; // pivot ๋ณด๋‹ค ํฐ ๊ฐ’์ด ๋‚˜์˜ฌ๋•Œ๋งˆ๋‹ค ์ด๋™

        if (low <= high){ // low์™€ high ๊ฐ€ ์ค‘๋‹จ๋œ ์ง€์ ์ด ์„œ๋กœ ์œ„์น˜๊ฐ€ ์—ญ์ „๋œ ์ง€์ ์ด ์•„๋‹ˆ๋ผ๋ฉด
            int temp = arr[low];    // low ์™€ high ์˜ ๊ฐ’ ๋ณ€๊ฒฝ
            arr[low] = arr[high];
            arr[high] = temp;
        }
    }

    // ํ”ผ๋ฒ—๊ณผ high ์œ„์น˜ ๊ตํ™˜
    int temp = arr[p];
    arr[p] = arr[high];
    arr[high] = temp;

    return high; // ํ”ผ๋ฒ— ์œ„์น˜ ๋ฐ˜ํ™˜

}

void quick_sort(int arr[], int left, int right){
    if (left < right){
        int pivot = partition(arr, left, right);

        quick_sort(arr, left, pivot-1); // ํ”ผ๋ฒ—์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ ๋ฐฐ์—ด ์ •๋ ฌ
        quick_sort(arr, pivot+1, right); // ํ”ผ๋ฒ— ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฅธ์ชฝ ๋ฐฐ์—ด ์ •๋ ฌ
    }
}
int main (){
    int arr [] = {3, 2, 1, 5, 7, 9, 6};

    quick_sort(arr, 0, sizeof(arr)/sizeof(arr[0])-1);

    for (int i = 0 ; i < sizeof(arr)/sizeof(arr[0]) ; i++){
        printf("%d ", arr[i]);
    }
}