Insertion Sort (μ‚½μž… μ •λ ¬)

μ‚½μž… 정렬은 이미 μ •λ ¬λœ 데이터 λ²”μœ„μ— μ •λ ¬λ˜μ§€ μ•Šμ€ 데이터λ₯Ό μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…μ‹œμΌœ μ •λ ¬ν•˜λŠ” 방식이닀.

μ‹œκ°„λ³΅μž‘λ„λŠ” λŠλ¦¬μ§€λ§Œ κ΅¬ν˜„μ€ μ–΄λ ΅μ§€ μ•Šμ€ νŽΈμ΄λ‹€.

μ‚½μž… μ •λ ¬ κ³Όμ •

  1. ν˜„μž¬ index에 데이터λ₯Ό μ„ νƒν•œλ‹€.

  2. ν˜„μž¬ μ„ νƒν•œ 데이터가 μ •λ ¬λœ λ²”μœ„μ— μ‚½μž…λ  μœ„μΉ˜λ₯Ό νƒμƒ‰ν•œλ‹€.

  3. μ‚½μž… μœ„μΉ˜λΆ€ν„° index에 μžˆλŠ” μœ„μΉ˜κΉŒμ§€ shift 연산을 μˆ˜ν–‰ν•œλ‹€.

  4. μ‚½μž… μœ„μΉ˜μ— ν˜„μž¬ μ„ νƒν•œ 데이터λ₯Ό μ‚½μž…ν•˜κ³  index++ 연산을 μˆ˜ν–‰ν•œλ‹€.

  5. 전체 데이터 크기만큼 indexκ°€ 컀질 λ•ŒκΉŒμ§€, 즉 선택할 데이터가 없을 λ•ŒκΉŒμ§€ λ°˜λ³΅ν•œλ‹€.

예λ₯Ό λ“€μ–΄ μœ„μ™€ 같이 5번째 μ›μ†ŒκΉŒμ§€ 정렬이 λ˜μ–΄ 있고, 6번째 μ›μ†Œλ₯Ό μ •λ ¬ν•  차둀이닀.

μ‚½μž… 정렬은 μ•ž μ›μ†Œλ“€μ΄ λͺ¨λ‘ μ •λ ¬λ˜μ–΄ μžˆλŠ” 상황이고 숫자 4λ₯Ό μ μ ˆν•œ μœ„μΉ˜μ— μ‚½μž…ν•˜μ—¬ μ •λ ¬ν•˜λ €κ³  ν•œλ‹€.

  1. λ¨Όμ € 4λ₯Ό key둜 μ§€μ •ν•˜κ³  μ•žμ— μžˆλŠ” μ›μ†Œ(9)와 λΉ„κ΅ν•΄μ„œ μ•žμ— μžˆλŠ” μ›μ†Œκ°€ 더 크면 swapν•œλ‹€.

  2. swap이 μΌμ–΄λ‚œ 이후, κ·Έ μ•žμ— μžˆλŠ” μ›μ†Œμ™€ λ‹€μ‹œ λΉ„κ΅ν•˜μ—¬ 같은 μž‘μ—…μ„ λ°˜λ³΅ν•œλ‹€.

  3. μ•žμ— μžˆλŠ” μ›μ†Œκ°€ key보닀 μž‘μ€ 경우 탐색을 μ€‘λ‹¨ν•œλ‹€.

μœ„μ™€ 같은 λ°©μ‹μœΌλ‘œ μ›μ†Œκ°€ μ˜€λ¦„μ°¨μˆœ 정렬을 μœ μ§€ν•œ 채 μ§„ν–‰ν•˜λŠ” 방식이 μ‚½μž… 정렬이닀.

μ–Όλ§ˆλ‚˜ μ •λ ¬λ˜λŠλƒμ— 따라 μ§„ν–‰ νšŸμˆ˜λŠ” λ‹¬λΌμ§€μ§€λ§Œ μ΅œλŒ€ n(n-1)/2 번 탐색이 μ§„ν–‰λœλ‹€.

λ”°λΌμ„œ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(N^2) 이닀.

ex)

1 9 8 6 4, key = 4

  • 1 9 8 6 6 (j = 3)

  • 1 9 8 8 6 (j = 2)

  • 1 9 9 8 6 (j = 1)

  • 1 4 9 8 6 (j = 0), arr[j + 1= key

Last updated