# ìê³ ë¦¬ì¦ - ìë° ## ì´ [ê°ë°ë¸ë°ì¹](https://github.com/TheAlgorithms/Java/tree/Development)ë 기존 íë¡ì í¸ë¥¼ Java íë¡ì í¸ êµ¬ì¡°ë¡ ì¬ê°ë°í기 ìí´ ìì±ëìë¤. 기ì¬ë를 ìí´ ê°ë° ì§ì¬ë¡ ì íí ì ìë¤. ìì¸í ë´ì©ì ì´ ë¬¸ì 를 참조íììì¤. 컨í¸ë¦¬ë·°ì ì ìí´ [ê°ë°ë¸ë°ì¹](https://github.com/TheAlgorithms/Java/tree/Development)ë¡ ì íí ì ìë¤. ìì¸í ë´ì©ì [ì´ ì´ì](https://github.com/TheAlgorithms/Java/issues/474)를 ì°¸ê³ íììì¤. ### ìë°ë¡ 구íë 모ë ìê³ ë¦¬ì¦ë¤ (êµì¡ì©) ì´ê²ë¤ì ë¨ì§ ìë²ì ìí ê²ì´ë¤. íì¤ ìë° ë¼ì´ë¸ë¬ë¦¬ìë ì±ë¥ìì ì´ì ë¡ ë ëì ê²ë¤ì´ 구íëì´ìë¤ ## ì ë ¬ ìê³ ë¦¬ì¦ ### Bubble(ë²ë¸ ì ë ¬) ![alt text][bubble-image] From [Wikipedia][bubble-wiki]: ë²ë¸ ìí¸(sinking sorë¼ê³ ë ë¶ë¦¬ì)ë 리ì¤í¸ë¥¼ ë°ë³µì ì¸ ë¨ê³ë¡ ì ê·¼íì¬ ì ë ¬íë¤. ê°ê°ì ì§ì ë¹êµíë©°, ììê° ì못ë ê²½ì° ê·¸ì í ìì´í ë¤ì ì¤ìíë ìê³ ë¦¬ì¦ì´ë¤. ë ì´ì ì¤ìí ê²ì´ ìì ëê¹ì§ ë°ë³µíë©°, ë°ë³µì´ ëë¨ì 리ì¤í¸ê° ì ë ¬ëììì ì미íë¤. **ìì±** - ìµì ì ì±ë¥ O(n^2) - ìµê³ ì ì±ë¥ O(n) - íê· ì±ë¥ O(n^2) ###### View the algorithm in [action][bubble-toptal] ### Insertion(ì½ì ì ë ¬) ![alt text][insertion-image] From [Wikipedia][insertion-wiki]: ì½ì ì ë ¬ì ìµì¢ ì ë ¬ë ë°°ì´(ëë 리ì¤í¸)ì íë²ì íëì© êµ¬ì¶íë ìê³ ë¦¬ì¦ì´ë¤. ì´ê²ì í° ë¦¬ì¤í¸ìì ë ëì ìê³ ë¦¬ì¦ì¸ íµ ìí¸, í ìí¸, ëë ë¨¸ì§ ìí¸ë³´ë¤ í¨ì¬ ìì¢ì í¨ì¨ì ê°ì§ë¤. 그림ìì ê° ë§ëë ì ë ¬í´ì¼ íë ë°°ì´ì ìì를 ëíë¸ë¤. ìë¨ê³¼ ë ë²ì§¸ ìë¨ ë§ëì 첫 ë²ì§¸ êµì°¨ì ìì ë°ìíë ê²ì ë ë²ì§¸ ììê° ì²« ë²ì§¸ ììë³´ë¤ ë ëì ì°ì ìì를 ê°ì§ê¸° ë문ì ë§ëë¡ íìëë ì´ë¬í ìì를 êµíí ê²ì´ë¤. ì´ ë°©ë²ì ë°ë³µíë©´ ì½ì ì ë ¬ì´ ìë£ëë¤. **ìì±** - ìµì ì ì±ë¥ O(n^2) - ìµê³ ì ì±ë¥ O(n) - íê· O(n^2) ###### View the algorithm in [action][insertion-toptal] ### Merge(í©ë³ ì ë ¬) ![alt text][merge-image] From [Wikipedia][merge-wiki]: ì»´í¨í° ê³¼íìì, í©ë³ ì ë ¬ì í¨ì¨ì ì¸, ë²ì©ì ì¸, ë¹êµ ê¸°ë° ì ë ¬ ìê³ ë¦¬ì¦ì´ë¤. ëë¶ë¶ì 구íì ìì ì ì¸ ë¶ë¥ë¥¼ ì´ë£¨ëë°, ì´ê²ì 구íì´ ì ë ¬ë ì¶ë ¥ì ëì¼í ììì ì ë ¥ ìì를 ì ì§íë¤ë ê²ì ì미íë¤. í©ë³ ì ë ¬ì 1945ë ì John von Neumannì´ ë°ëª í ë¶í ì ë³µ ìê³ ë¦¬ì¦ì´ë¤. **ìì±** - ìµì ì ì±ë¥ O(n log n) (ì¼ë°ì ) - ìµê³ ì ì±ë¥ O(n log n) - íê· O(n log n) ###### View the algorithm in [action][merge-toptal] ### Quick(íµ ì ë ¬) ![alt text][quick-image] From [Wikipedia][quick-wiki]: íµ ì ë ¬sometimes called partition-exchange sort)ì í¨ì¨ì ì¸ ì ë ¬ ìê³ ë¦¬ì¦ì¼ë¡, ë°°ì´ì ìì를 ììëë¡ ì ë ¬íë ì²´ê³ì ì¸ ë°©ë² ìíì íë¤. **ìì±** - ìµì ì ì±ë¥ O(n^2) - ìµê³ ì ì±ë¥ O(n log n) or O(n) with three-way partition - íê· O(n log n) ###### View the algorithm in [action][quick-toptal] ### Selection(ì í ì ë ¬) ![alt text][selection-image] From [Wikipedia][selection-wiki]: ìê³ ë¦¬ì¦ ì ë ¥ 리ì¤í¸ë¥¼ ë ë¶ë¶ì¼ë¡ ëëë¤ : 첫 ë¶ë¶ì ìì´í ë¤ì´ ì´ë¯¸ ì¼ìª½ìì ì¤ë¥¸ìª½ì¼ë¡ ì ë ¬ëìë¤. ê·¸ë¦¬ê³ ë¨ì ë¶ë¶ì ìì´í ë¤ì ëë¨¸ì§ í목ì ì°¨ì§íë 리ì¤í¸ì´ë¤. ì²ììë ì ë ¬ë 리ì¤í¸ë 공백ì´ê³ ë머ì§ê° ì ë¶ì´ë¤. ì¤ë¥´ì°¨ì(ëë ë´ë¦¼ì°¨ì) ìê³ ë¦¬ì¦ì ê°ì¥ ìì ìì를 ì ë ¬ëì§ ìì 리ì¤í¸ìì ì°¾ê³ ì ë ¬ì´ ìë ê°ì¥ ì¼ìª½(ì ë ¬ë 리ì¤í¸) 리ì¤í¸ì ë°ê¾¼ë¤. ì´ë ê² ì¤ë¥¸ìª½ì¼ë¡ ëìê°ë¤. **ìì±** - ìµì ì ì±ë¥ O(n^2) - ìµê³ ì ì±ë¥ O(n^2) - íê· O(n^2) ###### View the algorithm in [action][selection-toptal] ### Shell(ì ì ë ¬) ![alt text][shell-image] From [Wikipedia][shell-wiki]: ì ì ë ¬ì ë©ë¦¬ ë¨ì´ì ¸ ìë í목ì êµíì íì©íë ì½ì ì¢ ë¥ì ì¼ë°íì´ë¤. ê·¸ ìì´ëì´ë 모ë në²ì§¸ ììê° ì ë ¬ë 목ë¡ì ì ê³µíë¤ë ê²ì ê³ ë ¤íì¬ ì´ë ê³³ììë ì§ ììíëë¡ ììì 목ë¡ì ë°°ì´íë ê²ì´ë¤. ì´ë¬í 목ë¡ì h-sortedë¡ ìë ¤ì ¸ ìë¤. ë§ì°¬ê°ì§ë¡, ê°ê° ê°ë³ì ì¼ë¡ ì ë ¬ë h ì¸í°ë¦¬ë¸ 목ë¡ì¼ë¡ ê°ì£¼ë ì ìë¤. **ìì±** - ìµì ì ì±ë¥ O(nlog2 2n) - ìµê³ ì ì±ë¥ O(n log n) - Average case performance depends on gap sequence ###### View the algorithm in [action][shell-toptal] ### ìê° ë³µì¡ì± ê·¸ëí ì ë ¬ ìê³ ë¦¬ì¦ì ë³µì¡ì± ë¹êµ (ë²ë¸ ì ë ¬, ì½ì ì ë ¬, ì í ì ë ¬) [ë³µì¡ì± ê·¸ëí](https://github.com/prateekiiest/Python/blob/master/sorts/sortinggraphs.png) --- ## ê²ì ìê³ ë¦¬ì¦ ### Linear (ì í íì) ![alt text][linear-image] From [Wikipedia][linear-wiki]: ì í íì ëë ìì°¨ íìì ëª©ë¡ ë´ìì 목íê°ì ì°¾ë ë°©ë²ì´ë¤. ì¼ì¹ íëª©ì´ ë°ê²¬ëê±°ë 모ë ììê° íìë ëê¹ì§ 목ë¡ì ê° ììì ëí´ ëª©íê°ì ìì°¨ì ì¼ë¡ ê²ì¬íë¤. ì í ê²ìì ìµì ì ì í ìê°ì¼ë¡ ì¤íëë©° ìµë nê°ì ë¹êµìì ì´ë£¨ì´ì§ë¤. ì¬ê¸°ì nì 목ë¡ì 길ì´ë¤. **ìì±** - ìµì ì ì±ë¥ O(n) - ìµê³ ì ì±ë¥ O(1) - íê· O(n) - ìµì ì ê²½ì° ê³µê° ë³µì¡ì± O(1) iterative ### Binary (ì´ì§ íì) ![alt text][binary-image] From [Wikipedia][binary-wiki]: ì´ì§ íì, (also known as half-interval search or logarithmic search), ì ì ë ¬ë ë°°ì´ ë´ìì 목íê°ì ìì¹ë¥¼ ì°¾ë ê²ì ìê³ ë¦¬ì¦ì´ë¤. 목íê°ì ë°°ì´ì ì¤ê° ììì ë¹êµíë¤; ë§ì½ 목íê°ì´ ëì¼íì§ ìì¼ë©´, 목í물ì ì ë°ì´ ì ê±°ëê³ ê²ìì´ ì±ê³µí ëê¹ì§ ëë¨¸ì§ ì ë°ìì ê²ìëë¤. **ìì±** - ìµì ì ì±ë¥ O(log n) - ìµê³ ì ì±ë¥ O(1) - íê· O(log n) - ìµì ì ê²½ì° ê³µê° ë³µì¡ì± O(1) [bubble-toptal]: https://www.toptal.com/developers/sorting-algorithms/bubble-sort [bubble-wiki]: https://en.wikipedia.org/wiki/Bubble_sort [bubble-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/8/83/Bubblesort-edited-color.svg/220px-Bubblesort-edited-color.svg.png "Bubble Sort" [insertion-toptal]: https://www.toptal.com/developers/sorting-algorithms/insertion-sort [insertion-wiki]: https://en.wikipedia.org/wiki/Insertion_sort [insertion-image]: https://upload.wikimedia.org/wikipedia/commons/7/7e/Insertionsort-edited.png "Insertion Sort" [quick-toptal]: https://www.toptal.com/developers/sorting-algorithms/quick-sort [quick-wiki]: https://en.wikipedia.org/wiki/Quicksort [quick-image]: https://upload.wikimedia.org/wikipedia/commons/6/6a/Sorting_quicksort_anim.gif "Quick Sort" [merge-toptal]: https://www.toptal.com/developers/sorting-algorithms/merge-sort [merge-wiki]: https://en.wikipedia.org/wiki/Merge_sort [merge-image]: https://upload.wikimedia.org/wikipedia/commons/c/cc/Merge-sort-example-300px.gif "Merge Sort" [selection-toptal]: https://www.toptal.com/developers/sorting-algorithms/selection-sort [selection-wiki]: https://en.wikipedia.org/wiki/Selection_sort [selection-image]: https://upload.wikimedia.org/wikipedia/commons/thumb/b/b0/Selection_sort_animation.gif/250px-Selection_sort_animation.gif "Selection Sort Sort" [shell-toptal]: https://www.toptal.com/developers/sorting-algorithms/shell-sort [shell-wiki]: https://en.wikipedia.org/wiki/Shellsort [shell-image]: https://upload.wikimedia.org/wikipedia/commons/d/d8/Sorting_shellsort_anim.gif "Shell Sort" [linear-wiki]: https://en.wikipedia.org/wiki/Linear_search [linear-image]: http://www.tutorialspoint.com/data_structures_algorithms/images/linear_search.gif [binary-wiki]: https://en.wikipedia.org/wiki/Binary_search_algorithm [binary-image]: https://upload.wikimedia.org/wikipedia/commons/f/f7/Binary_search_into_array.png --- ## ëë¨¸ì§ ìê³ ë¦¬ì¦ì ëí ë§í¬ | ì í | ë¤ì´ë믹íë¡ê·¸ëë°(DP) | ìí¸ | ê·¸ ì¸ ê²ë¤ | | --------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------ | | [Any Base to Any Base](Conversions/AnyBaseToAnyBase.java) | [Coin Change](DynamicProgramming/CoinChange.java) | [Caesar](Ciphers/Caesar.java) | [Heap Sort](Sorts/HeapSort.java) | | [Any Base to Decimal](Conversions/AnyBaseToDecimal.java) | [Egg Dropping](DynamicProgramming/EggDropping.java) | [Columnar Transposition Cipher](Ciphers/ColumnarTranspositionCipher.java) | [Palindromic Prime Checker](Misc/PalindromePrime.java) | | [Binary to Decimal](Conversions/BinaryToDecimal.java) | [Fibonacci](DynamicProgramming/Fibonacci.java) | [RSA](Ciphers/RSA.java) | More soon... | | [Binary to HexaDecimal](Conversions/BinaryToHexadecimal.java) | [Kadane Algorithm](DynamicProgramming/KadaneAlgorithm.java) | more coming soon... | | [Binary to Octal](Conversions/BinaryToOctal.java) | [Knapsack](DynamicProgramming/Knapsack.java) | | [Decimal To Any Base](Conversions/DecimalToAnyBase.java) | [Longest Common Subsequence](DynamicProgramming/LongestCommonSubsequence.java) | | [Decimal To Binary](Conversions/DecimalToBinary.java) | [Longest Increasing Subsequence](DynamicProgramming/LongestIncreasingSubsequence.java) | | [Decimal To Hexadecimal](Conversions/DecimalToHexaDecimal.java) | [Rod Cutting](DynamicProgramming/RodCutting.java) | | and much more... | and more... | ### ìë£ êµ¬ì¡° | ê·¸ëí | í | 리ì¤í¸ | í | | ------------------------------------------------------- | -------------------------------------------------------------- | ------------------------------------------------------------- | --------------------------------------------------------------------------- | | | [ë¹ í ìì¸ì²ë¦¬](DataStructures/Heaps/EmptyHeapException.java) | [ìí ì°ê²°ë¦¬ì¤í¸](DataStructures/Lists/CircleLinkedList.java) | [ì ëë¦ ì´ë ì´ ë¦¬ì¤í¸ í](DataStructures/Queues/GenericArrayListQueue.java) | | | [í](DataStructures/Heaps/Heap.java) | [ì´ì¤ ì°ê²°ë¦¬ì¤í¸](DataStructures/Lists/DoublyLinkedList.java) | [í](DataStructures/Queues/Queues.java) | | [ê·¸ëí](DataStructures/Graphs/Graphs.java) | [í ìì](DataStructures/Heaps/HeapElement.java) | [ë¨ì ì°ê²°ë¦¬ì¤í¸](DataStructures/Lists/SinglyLinkedList.java) | | [í¬ë£¨ì¤ì¹¼ ìê³ ë¦¬ì¦](DataStructures/Graphs/Kruskal.java) | [ìµëí](DataStructures/Heaps/MaxHeap.java) | | [íë ¬ ê·¸ëí](DataStructures/Graphs/MatrixGraphs.java) | [ìµìí](DataStructures/Heaps/MinHeap.java) | | [í림 ìµìì ì¥í¸ë¦¬](DataStructures/Graphs/PrimMST.java) | | ì¤í | í¸ë¦¬ | | --------------------------------------------------------------- | ------------------------------------------------- | | [ë ¸ë ì¤í](DataStructures/Stacks/NodeStack.java) | [AVL í¸ë¦¬](DataStructures/Trees/AVLTree.java) | | [ì°ê²°ë¦¬ì¤í¸ ì¤í](DataStructures/Stacks/StackOfLinkedList.java) | [ì´ì§ í¸ë¦¬](DataStructures/Trees/BinaryTree.java) | | [ì¤í](DataStructures/Stacks) | And much more... | - [Bags](DataStructures/Bags/Bag.java) - [Buffer](DataStructures/Buffers/CircularBuffer.java) - [HashMap](DataStructures/HashMap/Hashing/HashMap.java) -