λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μ‚½μž…μ •λ ¬ (배열에 μžˆλŠ” μ•ŒνŒŒλ²³ μ°¨λ‘€λŒ€λ‘œ μ •λ ¬ν•˜κΈ°)

by 5566 2023. 11. 20.

I. μ†Œκ°œ

μ‚½μž…μ •λ ¬μ€ κ°„λ‹¨ν•œ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ 쀑 ν•˜λ‚˜λ‘œ, λ°°μ—΄ μ•ˆμ— μžˆλŠ” μ•ŒνŒŒλ²³μ„ μ°¨λ‘€λŒ€λ‘œ μ •λ ¬ν•˜λŠ” λ°©λ²•μž…λ‹ˆλ‹€. 이 μ•Œκ³ λ¦¬μ¦˜μ€ μ•ŒνŒŒλ²³μ΄ μ•„λ‹Œ λ‹€λ₯Έ μžλ£Œν˜•μ—λ„ 적용될 수 있으며, μ •λ ¬ν•΄μ•Ό ν•  ν•­λͺ©μ˜ μˆ˜κ°€ 적을 λ•Œ νš¨κ³Όμ μž…λ‹ˆλ‹€. μ‚½μž…μ •λ ¬μ€ 이미 μ •λ ¬λœ λΆ€λΆ„κ³Ό λΉ„κ΅ν•˜μ—¬ μ μ ˆν•œ μœ„μΉ˜μ— μƒˆλ‘œμš΄ ν•­λͺ©μ„ μ‚½μž…ν•˜λŠ” λ°©μ‹μœΌλ‘œ λ™μž‘ν•©λ‹ˆλ‹€.

μ‚½μž…μ •λ ¬μ€ κ°„λ‹¨ν•˜λ©΄μ„œλ„ 직관적인 λ°©λ²•μœΌλ‘œ 정렬을 μˆ˜ν–‰ν•˜λ―€λ‘œ, μž…λ¬Έμžμ—κ²Œλ„ μ‰½κ²Œ 이해할 수 μžˆλŠ” μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. 이제 ν•΄λ‹Ή μ•Œκ³ λ¦¬μ¦˜μ˜ κ°œλ…κ³Ό λ™μž‘ 과정에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

II. μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜ κ°œλ…

μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒκ³Ό 같은 κ°œλ…μ„ 가지고 λ™μž‘ν•©λ‹ˆλ‹€:

  1. μ •λ ¬λ˜μ§€ μ•Šμ€ λ°°μ—΄μ—μ„œ μ‹œμž‘ν•©λ‹ˆλ‹€.
  2. λ°°μ—΄μ˜ μš”μ†Œλ₯Ό μ°¨λ‘€λŒ€λ‘œ μ„ νƒν•˜μ—¬ 이미 μ •λ ¬λœ λΆ€λΆ„κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
  3. μ„ νƒν•œ μš”μ†Œλ₯Ό 이미 μ •λ ¬λœ λΆ€λΆ„μ˜ μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•©λ‹ˆλ‹€.
  4. 이 과정을 λ°˜λ³΅ν•˜μ—¬ λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œκ°€ 정렬될 λ•ŒκΉŒμ§€ μ§„ν–‰ν•©λ‹ˆλ‹€.

μœ„μ˜ κ°œλ…μ„ ν† λŒ€λ‘œ μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μƒμ„Ένžˆ μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

III. μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ˜ λ™μž‘ κ³Όμ •

μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ λ‹€μŒκ³Ό 같은 λ‹¨κ³„λ‘œ λ™μž‘ν•©λ‹ˆλ‹€:

  1. μ •λ ¬λ˜μ§€ μ•Šμ€ λ°°μ—΄μ—μ„œ 첫 번째 μš”μ†Œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.
  2. μ„ νƒν•œ μš”μ†Œλ₯Ό 이미 μ •λ ¬λœ λΆ€λΆ„κ³Ό λΉ„κ΅ν•©λ‹ˆλ‹€.
  3. μ •λ ¬λœ λΆ€λΆ„μ—μ„œ μ„ νƒν•œ μš”μ†Œλ³΄λ‹€ 큰 μš”μ†Œλ₯Ό ν•˜λ‚˜μ”© 였λ₯Έμͺ½μœΌλ‘œ μ΄λ™μ‹œν‚΅λ‹ˆλ‹€. 이 과정은 λΉ„κ΅ν•˜λŠ” μš”μ†Œκ°€ μ„ νƒν•œ μš”μ†Œλ³΄λ‹€ μž‘μ•„μ§ˆ λ•ŒκΉŒμ§€ λ°˜λ³΅λ©λ‹ˆλ‹€.
  4. μ μ ˆν•œ μœ„μΉ˜λ₯Ό μ°Ύμ•˜μœΌλ©΄ μ„ νƒν•œ μš”μ†Œλ₯Ό κ·Έ μœ„μΉ˜μ— μ‚½μž…ν•©λ‹ˆλ‹€.
  5. λ‹€μŒ μš”μ†Œλ₯Ό μ„ νƒν•˜μ—¬ μœ„μ˜ 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€.
  6. λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œκ°€ 정렬될 λ•ŒκΉŒμ§€ μ΄λŸ¬ν•œ 과정을 λ°˜λ³΅ν•©λ‹ˆλ‹€.

μ΄λŸ¬ν•œ λ™μž‘ 과정을 톡해 μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ λ°°μ—΄ μ•ˆμ˜ μš”μ†Œλ“€μ„ μž‘μ€ 것뢀터 큰 κ²ƒμ˜ μˆœμ„œλŒ€λ‘œ μ •λ ¬ν•©λ‹ˆλ‹€. 이제 μ˜ˆμ‹œλ₯Ό 톡해 μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ˜ λ™μž‘ 과정을 μ΄ν•΄ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

IV. μ‚½μž…μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„ 뢄석

μ‚½μž…μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” 반볡문의 νšŸμˆ˜μ— 따라 κ²°μ •λ©λ‹ˆλ‹€. μ•„λž˜μ˜ μ„€λͺ…을 톡해 μ‚½μž…μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό λΆ„μ„ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. μ΅œμ„ μ˜ 경우의 μ‹œκ°„ λ³΅μž‘λ„: μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ μ΅œμ„ μ˜ κ²½μš°λŠ” 이미 μ •λ ¬λœ 배열을 λ§Œλ‚¬μ„ λ•Œμž…λ‹ˆλ‹€. 이 κ²½μš°μ—λŠ” λ‚΄λΆ€ 반볡문이 μ‹€ν–‰λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 전체적인 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n) μž…λ‹ˆλ‹€.

  2. μ΅œμ•…μ˜ 경우의 μ‹œκ°„ λ³΅μž‘λ„: μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ΄ μ΅œμ•…μ˜ κ²½μš°λŠ” μ—­μˆœμœΌλ‘œ μ •λ ¬λœ 배열을 λ§Œλ‚¬μ„ λ•Œμž…λ‹ˆλ‹€. 이 κ²½μš°μ—λŠ” λͺ¨λ“  μš”μ†Œλ₯Ό λΉ„κ΅ν•˜κ³  μ΄λ™ν•΄μ•Όν•˜λ―€λ‘œ λ‚΄λΆ€ 반볡문이 i번 λ°˜λ³΅ν•˜κ²Œ λ©λ‹ˆλ‹€. λ”°λΌμ„œ 전체적인 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n^2) μž…λ‹ˆλ‹€.

  3. 평균적인 경우의 μ‹œκ°„ λ³΅μž‘λ„: μ‚½μž…μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ€ ν‰κ· μ μœΌλ‘œ O(n^2) 의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§€μ§€λ§Œ, μž…λ ₯ 배열이 μ •λ ¬λœ 정도와 크기에 따라 λ‹€λ₯΄κ²Œ 츑정될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ‚½μž…μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό λΆ„μ„ν•œ κ²°κ³Ό, μ΅œμ•…μ˜ κ²½μš°μ™€ 평균적인 κ²½μš°μ—λŠ” μž…λ ₯의 크기에 따라 제곱의 ν˜•νƒœλ‘œ μ‹œκ°„μ΄ μ¦κ°€ν•˜λŠ” 것을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ μ‚½μž…μ •λ ¬μ€ μž…λ ₯ 크기가 μž‘κ±°λ‚˜ 이미 μ •λ ¬λœ 배열에 λŒ€ν•΄ 비ꡐ적 효율적인 μ•Œκ³ λ¦¬μ¦˜μ΄μ§€λ§Œ, μž…λ ₯ 크기가 크면 μ‹œκ°„μ΄ 많이 μ†Œμš”λ˜μ–΄ 효율이 λ–¨μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

V. μ‚½μž…μ •λ ¬μ˜ ν™œμš© μ˜ˆμ‹œ

μ‚½μž…μ •λ ¬μ€ 일반적으둜 μž‘μ€ 규λͺ¨μ˜ λ°°μ—΄μ΄λ‚˜ 거의 μ •λ ¬λœ 배열을 μ •λ ¬ν•˜λŠ” 데에 효과적으둜 μ‚¬μš©λ©λ‹ˆλ‹€. μ•„λž˜μ—μ„œλŠ” μ‚½μž…μ •λ ¬μ΄ ν™œμš©λ˜λŠ” λͺ‡ 가지 μ˜ˆμ‹œλ₯Ό μ‚΄νŽ΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

  1. μΉ΄λ“œ κ²Œμž„
    μ‚½μž…μ •λ ¬μ€ μΉ΄λ“œ κ²Œμž„μ—μ„œ μΉ΄λ“œλ₯Ό 손에 λ“€κ³  μ •λ ¬ν•˜λŠ” 데에 μœ μš©ν•©λ‹ˆλ‹€. ν”Œλ ˆμ΄μ–΄κ°€ μƒˆλ‘œμš΄ μΉ΄λ“œλ₯Ό 받을 λ•Œλ§ˆλ‹€ μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚½μž…μ •λ ¬μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  2. 온라인 주문
    μ‚½μž…μ •λ ¬μ€ 온라인으둜 주문된 μƒν’ˆλ“€μ„ 이름, 가격 λ“±μ˜ νŠΉμ • 쑰건에 따라 μ •λ ¬ν•˜λŠ” 데에 ν™œμš©λ  수 μžˆμŠ΅λ‹ˆλ‹€. 주문이 λ“€μ–΄μ˜¬ λ•Œλ§ˆλ‹€ μ •λ ¬λœ μˆœμ„œλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ μ‚½μž…μ •λ ¬μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  3. λ°μ΄ν„°λ² μ΄μŠ€ μ •λ ¬
    λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ λ ˆμ½”λ“œλ“€μ„ μ •λ ¬ν•˜λŠ” μž‘μ—…μ—μ„œ μ‚½μž…μ •λ ¬μ„ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ°μ΄ν„°λ² μ΄μŠ€μ˜ 인덱싱 μž‘μ—…μ—μ„œλ„ ν™œμš©λ  수 있으며, 이미 μ •λ ¬λœ 데이터듀에 μƒˆλ‘œμš΄ 데이터λ₯Ό μ‚½μž…ν•˜λŠ” 데에 μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

  4. λΆ€λΆ„ 정렬이 ν•„μš”ν•œ 경우
    μ‚½μž…μ •λ ¬μ€ 이미 λ°°μ—΄μ˜ 일뢀가 μ •λ ¬λœ μƒνƒœμΈ κ²½μš°μ— νš¨κ³Όμ μž…λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μ‹€μ‹œκ°„μœΌλ‘œ μž…λ ₯λ˜λŠ” λ°μ΄ν„°μ—μ„œ 졜근 λ°μ΄ν„°μ˜ 정렬이 ν•„μš”ν•œ 경우, 이전 데이터듀은 이미 μ •λ ¬λ˜μ–΄ 있고 μƒˆλ‘œμš΄ 데이터λ₯Ό μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•˜μ—¬ μ •λ ¬λœ μƒνƒœλ₯Ό μœ μ§€ν•˜λŠ”λ°μ— μ‚½μž…μ •λ ¬μ΄ μœ μš©ν•©λ‹ˆλ‹€.

μœ„μ˜ μ˜ˆμ‹œλ“€μ—μ„œλŠ” μ‚½μž…μ •λ ¬μ„ ν™œμš©ν•˜μ—¬ μ •λ ¬ μž‘μ—…μ„ μ†μ‰½κ²Œ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ‹¨μˆœν•˜λ©΄μ„œλ„ 효과적인 μ•Œκ³ λ¦¬μ¦˜μΈ μ‚½μž…μ •λ ¬μ€ λ‹€μ–‘ν•œ μƒν™©μ—μ„œ ν™œμš©λ  수 있으며, λ°°μ—΄μ˜ 크기가 μž‘κ±°λ‚˜ 이미 μ •λ ¬λœ λ°°μ—΄μ—μ„œμ˜ μ •λ ¬ μž‘μ—…μ— μ ν•©ν•©λ‹ˆλ‹€.

λŒ“κΈ€