πŸ’» Dev & CS

Merge Sort Algorithm

합병 μ •λ ¬(Merge Sort)μ΄λž€? λΆ„ν•  정볡 μ•Œκ³ λ¦¬μ¦˜(=Divide and conquer algorithm 즉, κ·ΈλŒ€λ‘œ ν•΄κ²°ν•  수 μ—†λŠ” 문제λ₯Ό μž‘μ€ 문제둜 λΆ„ν• ν•˜μ—¬ 문제λ₯Ό ν•΄κ²°ν•˜λŠ” λ°©λ²•μ΄λ‚˜ μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.)의 ν•˜λ‚˜λ‘œ O(n log n)의 μ‹œκ°„ λ³΅μž‘λ„λ₯Ό κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€. 합병 μ •λ ¬μ˜ μž‘λ™ μ•Œκ³ λ¦¬μ¦˜μ€ μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€. 리슀트의 길이가 1 μ΄ν•˜μ΄λ©΄ 이미 μ •λ ¬λœ κ²ƒμœΌλ‘œ λ³Έλ‹€. κ·Έλ ‡μ§€ μ•Šμ€ κ²½μš°μ—λŠ” λΆ„ν• (divide) : μ •λ ¬λ˜μ§€ μ•Šμ€ 리슀트λ₯Ό 절반으둜 잘라 λΉ„μŠ·ν•œ 크기의 두 λΆ€λΆ„ 리슀트둜 λ‚˜λˆˆλ‹€. 정볡(conquer) : 각 λΆ€λΆ„ 리슀트λ₯Ό μž¬κ·€μ μœΌλ‘œ 합병 정렬을 μ΄μš©ν•΄ μ •λ ¬ν•œλ‹€. κ²°ν•©(combine) : 두 λΆ€λΆ„ 리슀트λ₯Ό λ‹€μ‹œ ν•˜λ‚˜μ˜ μ •λ ¬λœ 리슀트둜 ν•©λ³‘ν•œλ‹€. μ΄λ•Œ μ •λ ¬ κ²°κ³Όκ°€ μž„μ‹œλ°°μ—΄μ— μ €μž₯λœλ‹€. 볡사(copy) : μž„μ‹œ 배열에 μ €μž₯된 κ²°κ³Όλ₯Ό μ›λž˜ 배열에 λ³΅μ‚¬ν•œλ‹€. 이해가 잘 μ•ˆκ°„λ‹€λ©΄ μ•„λž˜ μ• λ‹ˆλ©”μ΄μ…˜μ„ 톡해 μž‘λ™ 원리λ₯Ό μ‰½κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. ...

March 18, 2020 Β· 3 min Β· Sobamemil
πŸ’» Dev & CS

Insertion Sort Algorithm

μ‚½μž… μ •λ ¬(Insertion Sort)μ΄λž€? 자료 λ°°μ—΄μ˜ λͺ¨λ“  μš”μ†Œλ₯Ό μ•žμ—μ„œλΆ€ν„° μ°¨λ‘€λŒ€λ‘œ 이미 μ •λ ¬λœ λ°°μ—΄ λΆ€λΆ„κ³Ό λΉ„κ΅ν•˜μ—¬, μžμ‹ μ˜ μœ„μΉ˜λ₯Ό μ°Ύμ•„ μ‚½μž…ν•¨μœΌλ‘œμ¨ 정렬을 μ™„μ„±ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€. μ‚½μž… μ •λ ¬μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n2)이며 μ•ˆμ • μ •λ ¬μž…λ‹ˆλ‹€. λ˜ν•œ 배열이 κΈΈμ–΄μ§ˆμˆ˜λ‘ 효율이 맀우 λ–¨μ–΄μ§€μ§€λ§Œ κ΅¬ν˜„μ΄ κ°„λ‹¨ν•˜λ‹€λŠ” μž₯점이 μžˆμŠ΅λ‹ˆλ‹€. μ‚½μž… μ •λ ¬μ˜ 예 μ‚½μž… μ •λ ¬μ˜ μ• λ‹ˆλ©”μ΄μ…˜ -Simpsons contributor- μ‚½μž… μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ κ΅¬ν˜„ν•˜κΈ° 전에 μ˜μ‚¬μ½”λ“œ(Pseudocode)둜 λ¨Όμ € 이해λ₯Ό ν•˜κ³  μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ” 것이 더 μ‰½κ²Œ μž‘μ„±ν•  수 μžˆμ„ κ²ƒμž…λ‹ˆλ‹€. Pseudocode : 1 2 3 4 5 6 7 8 9 //InsertionSort pseudo code InsertionSort(A,n) // sort A[1...n] for j <- 2 to n do key <- A[j] i <- j-1 while i>0 and A[i]>key do A[i+1] <- A[i] i <- i-1 A[i+1] <- key CCode: ...

March 17, 2020 Β· 3 min Β· Sobamemil