μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜

비ꡐ 기반 μ•Œκ³ λ¦¬μ¦˜(버블 μ •λ ¬, 퀡 μ •λ ¬, 병합 μ •λ ¬, νž™ μ •λ ¬)κ³Ό μ„ ν˜• μ‹œκ°„ μ •λ ¬(κ³„μˆ˜ μ •λ ¬, 기수 μ •λ ¬)둜 데이터λ₯Ό μ •λ ¬ν•˜λŠ” κΈ°μˆ μ„ λ§ˆμŠ€ν„°ν•˜μ„Έμš”. μ•ˆμ • μ •λ ¬κ³Ό λΆˆμ•ˆμ • μ •λ ¬μ˜ 차이λ₯Ό μ΄ν•΄ν•˜κ³ , μ‹œκ°„-곡간 νŠΈλ ˆμ΄λ“œμ˜€ν”„λ₯Ό νŒŒμ•…ν•˜λ©°, λ°μ΄ν„°λ² μ΄μŠ€, 검색 μ—”μ§„, 데이터 처리 νŒŒμ΄ν”„λΌμΈμ—μ„œμ˜ μ‹€μ œ μ‘μš© 사둀λ₯Ό ν™•μΈν•˜μ„Έμš”.

12 μ•Œκ³ λ¦¬μ¦˜

버블 μ •λ ¬

Beginner

μΈμ ‘ν•œ μš”μ†Œλ₯Ό 반볡적으둜 λΉ„κ΅ν•˜κ³  μˆœμ„œκ°€ 잘λͺ»λœ 경우 κ΅ν™˜ν•˜λŠ” κ°€μž₯ 기본적인 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. κ±°ν’ˆμ΄ 수면으둜 λ– μ˜€λ₯΄λ“―이 큰 값이 점차 λ°°μ—΄μ˜ 끝으둜 μ΄λ™ν•©λ‹ˆλ‹€. μž‘μ€ λ°μ΄ν„°μ…‹μ΄λ‚˜ μ •λ ¬μ˜ κΈ°λ³Έ 원리λ₯Ό μ΄ν•΄ν•˜κΈ° μœ„ν•œ ꡐ윑 λͺ©μ μ— κ°€μž₯ μ ν•©ν•©λ‹ˆλ‹€.

O(nΒ²)
O(1)
sortingcomparison
Start Learning

선택 μ •λ ¬

Beginner

κ°€μž₯ μž‘μ€ μš”μ†Œλ₯Ό μ°Ύμ•„ 반볡적으둜 μ•žμœΌλ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€. 각 λ°˜λ³΅λ§ˆλ‹€ 남은 μš”μ†Œ μ€‘μ—μ„œ μ΅œμ†Œκ°’μ„ "선택"ν•˜κ³  μ •λ ¬λœ λΆ€λΆ„ 뒀에 λ°°μΉ˜ν•©λ‹ˆλ‹€. μ΅œμ†Œν•œμ˜ λ©”λͺ¨λ¦¬ μ‚¬μš©μœΌλ‘œ κ΅¬ν˜„μ΄ κ°„λ‹¨ν•˜μ§€λ§Œ μž…λ ₯에 관계없이 항상 O(nΒ²) μ‹œκ°„μ΄ κ±Έλ¦½λ‹ˆλ‹€.

O(nΒ²)
O(1)
sortingcomparison
Start Learning

퀡 μ •λ ¬

Intermediate

ν”Όλ²— μš”μ†Œλ₯Ό μ„ νƒν•˜κ³  배열을 μ™Όμͺ½μ—λŠ” μž‘μ€ κ°’, 였λ₯Έμͺ½μ—λŠ” 큰 κ°’μœΌλ‘œ λΆ„ν• ν•˜λŠ” 맀우 효율적인 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 평균 O(n log n) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§€λ©° μ‹€μ œλ‘œ κ°€μž₯ 널리 μ‚¬μš©λ˜λŠ” μ •λ ¬ λ°©λ²•μž…λ‹ˆλ‹€. λŒ€λΆ€λΆ„μ˜ ν”„λ‘œκ·Έλž˜λ° μ–Έμ–΄μ—μ„œ λ‚΄μž₯ μ •λ ¬ ν•¨μˆ˜μ˜ 기초λ₯Ό ν˜•μ„±ν•©λ‹ˆλ‹€.

O(n log n)
O(log n)
sortingdivide-and-conquer
Start Learning

νž™ μ •λ ¬

Advanced

λ¨Όμ € μ΅œλŒ€ νž™μ„ κ΅¬μΆ•ν•œ λ‹€μŒ 루트 μš”μ†Œλ₯Ό 반볡적으둜 μΆ”μΆœν•˜μ—¬ μ •λ ¬ν•˜λŠ” 이진 νž™ 데이터 ꡬ쑰λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. μΆ”κ°€ λ©”λͺ¨λ¦¬ 없이 λͺ¨λ“  κ²½μš°μ— O(n log n) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό 보μž₯ν•©λ‹ˆλ‹€. μš°μ„ μˆœμœ„ 큐 κ΅¬ν˜„μ˜ κΈ°μ΄ˆλ‘œλ„ μ‚¬μš©λ©λ‹ˆλ‹€.

O(n log n)
O(1)
sortingheap
Start Learning

κ³„μˆ˜ μ •λ ¬

Intermediate

각 μš”μ†Œμ˜ λ°œμƒ 횟수λ₯Ό μ„Έκ³  μ‚°μˆ  연산을 톡해 μœ„μΉ˜λ₯Ό κ²°μ •ν•˜λŠ” 비비ꡐ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. kκ°€ μž…λ ₯ κ°’μ˜ λ²”μœ„μΌ λ•Œ O(n+k) μ‹œκ°„ λ³΅μž‘λ„λ₯Ό λ‹¬μ„±ν•©λ‹ˆλ‹€. μ•Œλ €μ§„ μ œν•œλœ λ²”μœ„ λ‚΄μ˜ μ •μˆ˜ 정렬에 μ΄μƒμ μž…λ‹ˆλ‹€. 기수 μ •λ ¬μ˜ κΈ°μ΄ˆκ°€ λ©λ‹ˆλ‹€.

O(n + k)
O(n + k)
sortinglinear-time
Start Learning

기수 μ •λ ¬

Advanced

μ΅œν•˜μœ„ μžλ¦Ώμˆ˜λΆ€ν„° μ΅œμƒμœ„ μžλ¦Ώμˆ˜κΉŒμ§€ μžλ¦Ώμˆ˜λ³„λ‘œ μš”μ†Œλ₯Ό μ²˜λ¦¬ν•˜λŠ” 비비ꡐ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 각 자릿수 μœ„μΉ˜μ—μ„œ κ³„μˆ˜ 정렬을 μ„œλΈŒλ£¨ν‹΄μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. dκ°€ 자릿수일 λ•Œ O(d(n+k)) μ‹œκ°„μ„ λ‹¬μ„±ν•©λ‹ˆλ‹€. μ •μˆ˜λ‚˜ κ³ μ • 길이 λ¬Έμžμ—΄ 정렬에 νƒμ›”ν•©λ‹ˆλ‹€.

O(d * n)
O(n + k)
sortinglinear-time
Start Learning

μ…Έ μ •λ ¬

Intermediate

멀리 λ–¨μ–΄μ§„ μš”μ†Œμ˜ κ΅ν™˜μ„ ν—ˆμš©ν•˜λŠ” μ‚½μž… μ •λ ¬μ˜ μ΅œμ ν™”μž…λ‹ˆλ‹€. 1둜 κ°μ†Œν•˜λŠ” 간격 μ‹œν€€μŠ€λ₯Ό μ‚¬μš©ν•˜μ—¬ μš”μ†Œλ₯Ό μ΅œμ’… μœ„μΉ˜μ— 더 λΉ λ₯΄κ²Œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€. 1959λ…„ Donald Shell이 발λͺ…ν•œ μ•Œκ³ λ¦¬μ¦˜μ˜ 이름을 λ”°μ„œ λͺ…λͺ…λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

O(n^1.25)
O(1)
sortinggap-sequence
Start Learning

버킷 μ •λ ¬

Advanced

μš”μ†Œλ₯Ό μ—¬λŸ¬ 버킷에 λΆ„λ°°ν•˜λŠ” 뢄포 기반 μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 각 버킷은 λ‹€λ₯Έ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μ‚¬μš©ν•˜μ—¬ κ°œλ³„μ μœΌλ‘œ μ •λ ¬λ©λ‹ˆλ‹€. μž…λ ₯이 λ²”μœ„μ— 걸쳐 κ· μΌν•˜κ²Œ λΆ„ν¬λ˜μ–΄ μžˆμ„ λ•Œ κ°€μž₯ 잘 μž‘λ™ν•©λ‹ˆλ‹€. 평균 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n+k)μž…λ‹ˆλ‹€.

O(n + k)
O(n + k)
sortingdistribution-sort
Start Learning

병합 μ •λ ¬

Intermediate

배열을 반으둜 λ‚˜λˆ„κ³ , 각 μ ˆλ°˜μ„ μž¬κ·€μ μœΌλ‘œ μ •λ ¬ν•œ λ‹€μŒ, λ‹€μ‹œ λ³‘ν•©ν•˜λŠ” λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. O(n log n) μ‹œκ°„μ„ 보μž₯ν•˜κ³  μ•ˆμ •μ μ΄μ§€λ§Œ μΆ”κ°€ λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•©λ‹ˆλ‹€. 큰 데이터셋과 μ—°κ²° 리슀트 정렬에 특히 νš¨κ³Όμ μž…λ‹ˆλ‹€.

O(n log n)
O(n)
sortingdivide-and-conquer
Start Learning

μ‚½μž… μ •λ ¬

Beginner

손에 μžˆλŠ” μΉ΄λ“œλ₯Ό μ •λ ¬ν•˜λŠ” κ²ƒμ²˜λŸΌ μž‘λ™ν•©λ‹ˆλ‹€ - 각 μš”μ†Œλ₯Ό ν•œ λ²ˆμ— ν•˜λ‚˜μ”© μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•©λ‹ˆλ‹€. 이미 μ •λ ¬λœ 데이터에 λŒ€ν•΄ O(n) μ‹œκ°„μ— μ‹€ν–‰λ˜λ―€λ‘œ μž‘μ€ λ°°μ—΄μ΄λ‚˜ 거의 μ •λ ¬λœ 데이터셋에 맀우 νš¨μœ¨μ μž…λ‹ˆλ‹€. κ°„λ‹¨ν•˜λ©΄μ„œλ„ μ μ‘ν˜• μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.

O(nΒ²)
O(1)
sortingstable
Start Learning

λΉ— μ •λ ¬

Beginner

1.3 배수둜 μ€„μ–΄λ“œλŠ” 더 큰 κ°„κ²©μœΌλ‘œ μš”μ†Œλ₯Ό λΉ„κ΅ν•˜μ—¬ λ°°μ—΄ 끝의 μž‘μ€ κ°’("거뢁이")을 μ œκ±°ν•˜λŠ” 버블 μ •λ ¬μ˜ κ°œμ„ μž…λ‹ˆλ‹€. κ°„λ‹¨ν•œ μˆ˜μ •μœΌλ‘œ μ„±λŠ₯을 O(nΒ²)μ—μ„œ μ‹€μ œλ‘œ O(nΒ²/2^p)둜 극적으둜 κ°œμ„ ν•©λ‹ˆλ‹€. μž‘μ€ μ•Œκ³ λ¦¬μ¦˜ 쑰정이 μ–΄λ–»κ²Œ μƒλ‹Ήν•œ κ°œμ„ μ„ κ°€μ Έμ˜¬ 수 μžˆλŠ”μ§€ λ³΄μ—¬μ€λ‹ˆλ‹€.

O(nΒ²/2^p)
O(1)
sortinggap-sequence
Start Learning

λ†ˆ μ •λ ¬

Beginner

κ°œλ…μ μœΌλ‘œ κ°€μž₯ κ°„λ‹¨ν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ - μš”μ†Œκ°€ μˆœμ„œλŒ€λ‘œ μžˆμ„ λ•ŒλŠ” μ•žμœΌλ‘œ μ΄λ™ν•˜κ³ , κ·Έλ ‡μ§€ μ•ŠμœΌλ©΄ κ΅ν™˜ν•˜κ³  λ’€λ‘œ μ΄λ™ν•©λ‹ˆλ‹€. 꽃병을 μ •λ ¬ν•˜λŠ” λ„€λœλž€λ“œ 정원 λ†ˆμ˜ 이름을 λ”°μ„œ λͺ…λͺ…λ˜μ—ˆμŠ΅λ‹ˆλ‹€. μ‚½μž… μ •λ ¬κ³Ό μœ μ‚¬ν•˜μ§€λ§Œ κ΅¬ν˜„μ΄ 더 κ°„λ‹¨ν•©λ‹ˆλ‹€. O(nΒ²) λ³΅μž‘λ„μ—λ„ λΆˆκ΅¬ν•˜κ³  μ •λ ¬ λ©”μ»€λ‹ˆμ¦˜μ„ μ΄ν•΄ν•˜λŠ” 데 ꡐ윑적 κ°€μΉ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

O(nΒ²)
O(1)
sortingsimple-algorithm
Start Learning

πŸ’‘ ν•™μŠ΅ 팁

기초λ₯Ό λ‹€μ§€κΈ° μœ„ν•΄ μ΄ˆκΈ‰ μ•Œκ³ λ¦¬μ¦˜λΆ€ν„° μ‹œμž‘ν•œ λ‹€μŒ, 쀑급 및 κ³ κΈ‰ 주제둜 μ§„ν–‰ν•˜μ„Έμš”. 각 μ•Œκ³ λ¦¬μ¦˜μ—λŠ” μΈν„°λž™ν‹°λΈŒ μ‹œκ°ν™”, λ³΅μž‘λ„ 뢄석, 그리고 μ—¬λŸ¬ μ–Έμ–΄μ˜ μ½”λ“œ μ˜ˆμ œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.