{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm-Analysis/2020-05-31-알고리즘-Counting-Sort/","result":{"data":{"site":{"siteMetadata":{"title":"Hun's Footsteps 🥷","author":"전여훈","siteUrl":"https://jeonyeohun.netlify.app","comment":{"disqusShortName":"","utterances":"jeonyeohun/jeonyeohun.github.io"},"sponsor":{"buyMeACoffeeId":"jeonyeohun"}}},"markdownRemark":{"id":"031dc677-edca-566d-9410-c98e480e640d","excerpt":"Comparison Sort 모든 정렬 알고리즘은 기본적으로 배열의 요소들을 검사하는 과정이 포함되어 있다. 결국 배열의 데이터들을 비교하기 위해서는 Decision Tree 를 만들어 경우의 수를 따져볼 수 있는데, 이로부터 우리는 decision tree 의 높이인 logn 만큼 비교연산이 일어난다는 것을 알아낼 수 있다. 비교연산의 시간 복잡도는 Օ(n) 이므로 비교연산을 사용하는 정렬 알고리즘은 아무리 빨라도 Օ(nlogn…","html":"<h2 id=\"comparison-sort\" style=\"position:relative;\"><a href=\"#comparison-sort\" aria-label=\"comparison sort permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Comparison Sort</h2>\n<p>모든 정렬 알고리즘은 기본적으로 배열의 요소들을 검사하는 과정이 포함되어 있다. 결국 배열의 데이터들을 비교하기 위해서는 Decision Tree 를 만들어 경우의 수를 따져볼 수 있는데, 이로부터 우리는 decision tree 의 높이인 logn 만큼 비교연산이 일어난다는 것을 알아낼 수 있다. 비교연산의 시간 복잡도는 Օ(n) 이므로 비교연산을 사용하는 정렬 알고리즘은 아무리 빨라도 Օ(nlogn)보다 빠를 수가 없다.</p>\n<p>우리가 자주 언급하는 빠른 정렬알고리즘인 퀵소트, 머지소트 역시 Օ(nlogn)을 복잡도로 가진다.</p>\n<h2 id=\"counting-sort\" style=\"position:relative;\"><a href=\"#counting-sort\" aria-label=\"counting sort permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Counting Sort</h2>\n<p>그렇다면 만약 비교연산을 사용하지 않는다면 어떨까? 비교연산을 사용하지 않는다면 Decision Tree 의 제약사항 없이 더 빠른 정렬이 가능하지 않을까?</p>\n<p>계수정렬 혹은 카운팅 소트는 이런 아이디어를 기반으로 해서 나온 <code class=\"language-text\">Օ(n+데이터의 최대값 k)</code>의 속도가 보장되는 정렬 알고리즘이다. 카운팅 소트는 이름 그대로 배열 내에 특정한 값이 몇번 등장했는지에 따라 정렬을 수행하기 때문에 비교연산이 사용되지 않는다.</p>\n<h2 id=\"algorithm-concept\" style=\"position:relative;\"><a href=\"#algorithm-concept\" aria-label=\"algorithm concept permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Algorithm Concept</h2>\n<p>카운팅 정렬은 다음과 같은 과정으로 수행된다.</p>\n<ol>\n<li>입력받은 배열 A의 요소값들의 등장횟수를 저장할 배열 B와 최종적으로 정렬된 값들을 담을 배열 C를 준비한다.</li>\n<li>입력밭은 배열에서 값을 하나씩 꺼내서 해당 값을 배열 B의 인덱스로 사용해 B 의 요소 값을 하나 증가시킨다. <code class=\"language-text\">(B[A[i]]++)</code></li>\n<li>B가 완성되면 B의 각 요소들을 누적합으로 갱신한다. <code class=\"language-text\">B[i] = B[i] + B[i-1]</code></li>\n<li>A 의 가장 뒤에서 부터 값을 하나씩 꺼내서 해당값을 B의 인덱스로 사용하고 참조된 B의 값을 배열 C의 인덱스로 사용해서 배열 C에 A에서 꺼낸 값을 넣는다. <code class=\"language-text\">C[B[A[i]]] = A[i]</code></li>\n<li>사용된 B의 값을 하나 감소시킨다. <code class=\"language-text\">(B[A[i]]--)</code></li>\n<li>A의 모든 요소에 대해 4번, 5번 과정을 반복한다.</li>\n</ol>\n<p>배열이 여러개 사용되고 서로가 서로를 인덱스로 사용하는 상황이랑 글로는 이해하기가 쉽지 않다. 그림으로 알아보자.</p>\n<h2 id=\"example\" style=\"position:relative;\"><a href=\"#example\" aria-label=\"example permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Example</h2>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 52.33333333333333%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAKCAYAAAC0VX7mAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA2UlEQVQoz51RBw6DMBDj/79khL3KECtwxQdEBwJRFcnYMYl1JtayLIRHa03TNN1CP2jj7WeRZeEF41OW5Ng2+UpRGATkuS4Fvs9r13HYg4Z/fD/24hwYORyI9F8DD30NDGQgnnEcqes66ldIftInr9/WpjImrKqKojCkOIoojuONJaR30TiXrGwmxHRFnnMd5XkMVHrT0kN9XJipjCl7Hr//G6Yy0NQ1j52lKSNNko2f9Mqp3Jtl51suioJvS+2VPMFvGr8KlSdZeRgGapqG2rbd8KZvvHme6QsUZ/oRr6cLPQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"1\"\n        title=\"1\"\n        src=\"/static/77bd28ec6910f75c1561673b229ce439/c1b63/1.png\"\n        srcset=\"/static/77bd28ec6910f75c1561673b229ce439/5a46d/1.png 300w,\n/static/77bd28ec6910f75c1561673b229ce439/0a47e/1.png 600w,\n/static/77bd28ec6910f75c1561673b229ce439/c1b63/1.png 1200w,\n/static/77bd28ec6910f75c1561673b229ce439/61583/1.png 1616w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>일단 배열 A를 입력받았고, 배열 B와 C를 준비했다.</p>\n<h3 id=\"phase-1\" style=\"position:relative;\"><a href=\"#phase-1\" aria-label=\"phase 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 1</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA5UlEQVQoz52S6ZKDIBCEff93jBe6lY0HxCPedqYpsXB/ZUPVx8CMNvRoABn7vmOe569YlgVOgwTbtmGaJuRZhiSOL1ElCVKB6ziKzpw6cuHthqqqroKceAoLxeOBmrEo7L6USGqv5ud+73d0bQt/BE697zp03yCC7cG6rgg4Da8XVJpaC85KppRYjxCH4Zlz1gnr0VFji9gats7ekH20JzXNedrHyDvN82mxN3SCxhjouobRGlowB/pP9NfsY9/31x5SbBxH/OS5tZ2LlewDaJU2q7K8fmW3GYcBwz+wz0vv+S/6gm+eR6/7iUyoZwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2\"\n        title=\"2\"\n        src=\"/static/c903ca8f73a41b355a8a1ce26c2c9a3d/c1b63/2.png\"\n        srcset=\"/static/c903ca8f73a41b355a8a1ce26c2c9a3d/5a46d/2.png 300w,\n/static/c903ca8f73a41b355a8a1ce26c2c9a3d/0a47e/2.png 600w,\n/static/c903ca8f73a41b355a8a1ce26c2c9a3d/c1b63/2.png 1200w,\n/static/c903ca8f73a41b355a8a1ce26c2c9a3d/d61c2/2.png 1800w,\n/static/c903ca8f73a41b355a8a1ce26c2c9a3d/29beb/2.png 1830w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>제일 먼저, A를 순회하면서 A에 들어가 있는 값들의 등장 횟수를 배열 B에 저장해주었다. 예를 들어 A에서 0이라는 값은 존재하지 않기 때문에 B의 0번 인덱스는 0이되고, 3은 총 2번 등장했기 때문에 B의 3번 인덱스는 2로 걍신되었다.</p>\n<p>주목할 점은 B의 배열길이는 A에 있는 최댓값에 따라 결정된다는 것이다. 이후에 이것이 성능에 어떤 영향이 있을지 논의해보자.</p>\n<h3 id=\"phase-2\" style=\"position:relative;\"><a href=\"#phase-2\" aria-label=\"phase 2 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 2</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA6ElEQVQoz51Si26DMAzk//+xIxCYujKSFFh5c/MFgqBSpa2RLnbOluNzEkHWsiwYhmFF35/tK27DOI4INYhonmf0kphrjUQp5Fm2W50kSAX0VRzvnN64j8sFZVmeC3LjLQwUtxsMbVH487dYwhxiR+7rekVT1ziuKFT/aRo070AK1kRVYZomRNzaxwM6Tb2EICXbRhCk+phwPCcq9vGQv3LKj853yDnuN72BSrqr7ve1Q19QHOccrDFw1sIK3Ab7ZI++kXzKPs2Q3XVdh88897IpK/sDKJU/gA94euVwaNv2/5DZc27Hgr96o6/jq6tBjAAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"3\"\n        title=\"3\"\n        src=\"/static/d3169586305a53d6d75125d0649cd693/c1b63/3.png\"\n        srcset=\"/static/d3169586305a53d6d75125d0649cd693/5a46d/3.png 300w,\n/static/d3169586305a53d6d75125d0649cd693/0a47e/3.png 600w,\n/static/d3169586305a53d6d75125d0649cd693/c1b63/3.png 1200w,\n/static/d3169586305a53d6d75125d0649cd693/d61c2/3.png 1800w,\n/static/d3169586305a53d6d75125d0649cd693/a8979/3.png 1828w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<p>B 배열의 값들을 1부터 마지막 값까지 바로 이전 값과 계속 더해서 누적합으로 만들어준다.</p>\n<h3 id=\"phase-3\" style=\"position:relative;\"><a href=\"#phase-3\" aria-label=\"phase 3 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 3</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABG0lEQVQoz5VR7W6DMBDj/Z+v7Y+2UKCBaiVAOrLyjedLYWyTpolIziWXk8++eOCapgld173Qtj/jX7k8R6c1hoeB45h5vHEc0bIwuV4RhSESpb7iNYoQE3IOL5dXLo5dPj0cELCuiCOww0ooW9/3yNkxu99RSMwyd9eMguLbm6Yql/N9vJHc3lJhwrK8xfKHtbBbQHJLcpskqOiuShSGqoI3DAPq59NZCdhVbElU8wgWq+6NOblHhJKcWD8ecd7tcD6d3EydQpmjJXu1FaKUo6go5l3NCh0hVRpjUBYFTFmiJMyM8ldczg8qLujAUjUVrTMUdU3TIOUsxLbYUv+Bdel+Dz8IoGmfBOsvL59S1/UmNLRaE22uncKF8BPGTaz63VazKgAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"4\"\n        title=\"4\"\n        src=\"/static/96800bd3b0b8c21451f65d2338b13e14/c1b63/4.png\"\n        srcset=\"/static/96800bd3b0b8c21451f65d2338b13e14/5a46d/4.png 300w,\n/static/96800bd3b0b8c21451f65d2338b13e14/0a47e/4.png 600w,\n/static/96800bd3b0b8c21451f65d2338b13e14/c1b63/4.png 1200w,\n/static/96800bd3b0b8c21451f65d2338b13e14/d61c2/4.png 1800w,\n/static/96800bd3b0b8c21451f65d2338b13e14/a8979/4.png 1828w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>배열 A의 가장 뒤에서 부터 값을 하나씩 꺼낸다. 이번에 꺼낸 값은 6이기 때문에 이 값을 배열 B의 인덱스로 사용해서 접근한다.</li>\n<li>배열 B의 6번 인덱스에 있는 값은 6이기 때문에 이 값을 사용해서 C에 접근한다. 이것은 배열 A에는 6보다 같거나 작은 값이 총 6개가 있음을 의미한다.</li>\n<li>배열 C의 6번째 요소에 6을 넣는다. 배열 A에 6보다 같거나 작은 값이 6개 있기 때문에 최종 배열의 6번째 칸에 넣어주면 6보다 작은 값은 모두 이 인덱스의 앞에 위치하고 큰 값들은 뒤에 위치하게 될 것이다.</li>\n<li>배열 B의 6번 인덱스의 값을 하나 줄여준다.</li>\n</ol>\n<h3 id=\"phase-4\" style=\"position:relative;\"><a href=\"#phase-4\" aria-label=\"phase 4 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 4</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABT0lEQVQoz31RCY6DMAzk///rsT0oR6DiphAamh7TcSirIq0WaYg9TmyP7YHf6/WCtXbC7bY8Z/t+h+172LKELQrY69XF7uTnHALv+XzixgdJHCMMAiRKTSf9OAwREcIFpxPSzQYxebXbIfV9+OQqFlgklJ9UqaoKRZ6jrmsU7ED8kpdL2vUn1jB5mShUTFafz8jIaXb9/Xlz9kFr6GHAkCYYkgSaGNrWcfJIS/xygWYBh66bOMZ6Af3H4wFPfobziKMIPiun6zV+tltEAkoMRDJl+sfjJJ1+SCjavxyly5hkdK5DmaOrJBUpqeclLWgax/VzF59OHL64jn7H7l2HLiGNlo8bSmxZrWG1VpBlEycxov1gtmW2InsxQ+luHEeknJlsMF2tnAS13yPhNhV5JZv9A8fDwS1tseXZMcbAMPHICybPiByG1R3/D2Ru3wnfadSs9kxopEYAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"5\"\n        title=\"5\"\n        src=\"/static/728a71b37df87fb0fb34aee7c8a0a747/c1b63/5.png\"\n        srcset=\"/static/728a71b37df87fb0fb34aee7c8a0a747/5a46d/5.png 300w,\n/static/728a71b37df87fb0fb34aee7c8a0a747/0a47e/5.png 600w,\n/static/728a71b37df87fb0fb34aee7c8a0a747/c1b63/5.png 1200w,\n/static/728a71b37df87fb0fb34aee7c8a0a747/d61c2/5.png 1800w,\n/static/728a71b37df87fb0fb34aee7c8a0a747/a8979/5.png 1828w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>A 배열에서 다음 값인 1을 꺼낸다.</li>\n<li>B 배열의 1번 인덱스에는 2가 들어있기 때문에</li>\n<li>C 배열의 2번째 위치에 A에서 꺼낸 값인 1을 넣어주고,</li>\n<li>B 배열의 1번 인덱스의 카운트를 하나 줄여준다.</li>\n</ol>\n<h3 id=\"phase-5\" style=\"position:relative;\"><a href=\"#phase-5\" aria-label=\"phase 5 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 5</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABSElEQVQoz31Si5KCMBDj///Px/hAoLR48qpQBUHNZXtyI3NzMhPSdiG72W0APs/nE8Mw/OB2m7OgqjAWheeh72fxcRwxaQiCx+OBG4NaKcRRBJ2mv6ziGAmRrZaIkgRmu4XabJDwW4mH+z1KJpoJykuylGWJ/HRCJZznfl+QBXUYIqdIRfHSGBSMVaz263iEcw7vTzCpXxhw/4E/OyZzFJrOLjrFJTNwRqM9W7Rti/v9jkBe3fUKRUtiQawcWFH6akF0OEBrjfDFso8Js1hgtV5DETHbELN6aZ2vUPromKH9hKaZrR0TtkzQsoCmrtHwzFfoBbmw1qKmNcugcE3264kZt1mGM6u3dHOmkPTxTw+lup5XwTCb2BbLYkssT5AboHguU07EIu2Z5QL73c4PbTbladN13WcwaUdbPSfbcUB9Xflz6du74DeekazwPbt+ngAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"6\"\n        title=\"6\"\n        src=\"/static/293d30c1e41d37921e696563ccc75999/c1b63/6.png\"\n        srcset=\"/static/293d30c1e41d37921e696563ccc75999/5a46d/6.png 300w,\n/static/293d30c1e41d37921e696563ccc75999/0a47e/6.png 600w,\n/static/293d30c1e41d37921e696563ccc75999/c1b63/6.png 1200w,\n/static/293d30c1e41d37921e696563ccc75999/d61c2/6.png 1800w,\n/static/293d30c1e41d37921e696563ccc75999/a8979/6.png 1828w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>A 배열에서 다음 값인 5를 꺼낸다.</li>\n<li>B 배열의 5번 인덱스에는 5가 들어있기 때문에</li>\n<li>C 배열의 5번째 위치에 A에서 꺼낸 값인 5을 넣어주고,</li>\n<li>B 배열의 5번 인덱스의 카운트를 하나 줄여준다.</li>\n</ol>\n<h3 id=\"phase-6\" style=\"position:relative;\"><a href=\"#phase-6\" aria-label=\"phase 6 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 6</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABZklEQVQoz2VSibKCMBDz/7/vPY9RuQ85BAShHmheUsHnjJ3JbOnupsmWBbiezyeGYcD5fEZPnPsefdNgSGL0aYo+O7zO5vxHNMZg5hAWj8cDl8sFSRzDdfaIowiu5yHe7RCsVvB8H8lyCcdxbM5nLlA+DLHfbpHn+ZvMEs7suq09ndC1LdquQ3c8oiNZS5KOzS0VWyhPqO7E+oHKP9dCZFKpZEWSpq5RVRVqxppR+5PvoSJ5TZVNltlcM+VtDfuOZYnr9fpvOU0SOPuXZc91EVFVSBLt0/UaG47A32wQ0aYnyxoNL1BdMNVJ7WKWeuFw9TCCmaIFzw0vM2wwJDK0aqZaRTNHYhzHl+X7/W6t5bRTFgWywwEFh23B75LKMyopXQcFY8Zz1aVpYi1/zVCEIpMNWQ+DwL56Sigefn8QkjTlqye0HinHOllV39cra0muiIVxim9wNiP/grtwu71rVae9iOa/5Q817KzcAaYZpQAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"7\"\n        title=\"7\"\n        src=\"/static/2708d9752202cd9e3b3eac08444a4ec0/c1b63/7.png\"\n        srcset=\"/static/2708d9752202cd9e3b3eac08444a4ec0/5a46d/7.png 300w,\n/static/2708d9752202cd9e3b3eac08444a4ec0/0a47e/7.png 600w,\n/static/2708d9752202cd9e3b3eac08444a4ec0/c1b63/7.png 1200w,\n/static/2708d9752202cd9e3b3eac08444a4ec0/d61c2/7.png 1800w,\n/static/2708d9752202cd9e3b3eac08444a4ec0/a8979/7.png 1828w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>A 배열에서 다음 값인 3를 꺼낸다.</li>\n<li>B 배열의 5번 인덱스에는 4가 들어있기 때문에</li>\n<li>C 배열의 4번째 위치에 A에서 꺼낸 값인 3을 넣어주고,</li>\n<li>B 배열의 3번 인덱스의 카운트를 하나 줄여준다.</li>\n</ol>\n<h3 id=\"phase-7\" style=\"position:relative;\"><a href=\"#phase-7\" aria-label=\"phase 7 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 7</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABV0lEQVQoz21SiZKCUAzj///P9YbHfSj3g4cDmk0RdtVdZmJqdNKmxQKfx+OBvuugiS5J0EURujBEV5ZPTes36Bc2xmD1EFj3+x3DMCCigWPbiL42cBwHwekEb7uFcl2Evg/7fJ7ZVQoeIfX5eESWZT9ms+HqrtsWTdNA01j7HrTnoc1zNIv+iZao63pO9vpYYiZT1lWFoihQc6LCVSg5ZcX4BWNXhPxWkkvhj7pg4/x6xe12+40cxzFsRol3OxwOByjGDff7Z+QggHJsBIzp8btiM9FkRa+aTGstG8XACQ27mTiCSRMYTmcYq+fS+76flz/zglUzKxPTNDEy/SaKhXKQhQFydk1pdrlcnuDSr+RZYy1HkFq0mM0l8vsO+THy/OluC59myWaDgAeRq8fEzHyN/EWTqBJTNImapenfK/MqmGgqxiP3IKOP4/iG6Z9aWP4rRuvb8g3qIazMlW6OCwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"8\"\n        title=\"8\"\n        src=\"/static/d4d7d1106cf4a7719dae3613fca08017/c1b63/8.png\"\n        srcset=\"/static/d4d7d1106cf4a7719dae3613fca08017/5a46d/8.png 300w,\n/static/d4d7d1106cf4a7719dae3613fca08017/0a47e/8.png 600w,\n/static/d4d7d1106cf4a7719dae3613fca08017/c1b63/8.png 1200w,\n/static/d4d7d1106cf4a7719dae3613fca08017/d61c2/8.png 1800w,\n/static/d4d7d1106cf4a7719dae3613fca08017/a8979/8.png 1828w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>A 배열에서 다음 값인 1를 꺼낸다.</li>\n<li>B 배열의 1번 인덱스에는 1이 들어있기 때문에</li>\n<li>C 배열의 1번째 위치에 A에서 꺼낸 값인 1을 넣어주고,</li>\n<li>B 배열의 1번 인덱스의 카운트를 하나 줄여준다.</li>\n</ol>\n<h3 id=\"phase-8\" style=\"position:relative;\"><a href=\"#phase-8\" aria-label=\"phase 8 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Phase 8</h3>\n<p><span\n      class=\"gatsby-resp-image-wrapper\"\n      style=\"position: relative; display: block; margin-left: auto; margin-right: auto; max-width: 1200px; \"\n    >\n      <span\n    class=\"gatsby-resp-image-background-image\"\n    style=\"padding-bottom: 46.333333333333336%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAJCAYAAAAywQxIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABXElEQVQoz2VSi46CMBDk///Pi3rhLVTeb4oCzs1WIVxsMtm2u53ObGuB4zXP0HGMQSkM9zuGvkdPHOMRx5zWGobj9TKwVi6mtoW6XuB6HuLTCZ5t4xaG8Ln2XBfR7QbHcUyUvYCImLd/f5Gm6U5mCA3784k+CNDyQMfClhd8oarQ1vW+7oimaTAOA47DEtZ1XU2yLArUPFSWJaoPZN5QUen7qFwHdZKgInlN7DU8V+Q5Ho8HLZNsmiYo9tChVbHl0l5IxSHVeiRS5zMu1ysCxhtter6310lrAtZIa0SttUmd2NxxHA2k0ZLUvN2Al2kq03ww3XXv/KdOb5FYluVtWSYFZSc8kGcZEjY6p4KMihMqKKhEchlz8ghbnVKxsfzVw5nfRorEplgPSaYcG/HPCSFJ73x5ycVRZKyKTakTqymVf72yDFEpxAIzZ4Nn/rOFmGnrX/4QZV+Itr/4B+ZyrLZO0t/zAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"9\"\n        title=\"9\"\n        src=\"/static/2ea183e2b0cd10d92eda57cee357e786/c1b63/9.png\"\n        srcset=\"/static/2ea183e2b0cd10d92eda57cee357e786/5a46d/9.png 300w,\n/static/2ea183e2b0cd10d92eda57cee357e786/0a47e/9.png 600w,\n/static/2ea183e2b0cd10d92eda57cee357e786/c1b63/9.png 1200w,\n/static/2ea183e2b0cd10d92eda57cee357e786/d61c2/9.png 1800w,\n/static/2ea183e2b0cd10d92eda57cee357e786/a8979/9.png 1828w\"\n        sizes=\"(max-width: 1200px) 100vw, 1200px\"\n        style=\"width:100%;height:100%;margin:0;vertical-align:middle;position:absolute;top:0;left:0;\"\n        loading=\"lazy\"\n      />\n    </span></p>\n<ol>\n<li>A 배열에서 다음 값인 3를 꺼낸다.</li>\n<li>B 배열의 3번 인덱스에는 3이 들어있기 때문에</li>\n<li>C 배열의 3번째 위치에 A에서 꺼낸 값인 3을 넣어주고,</li>\n<li>B 배열의 3번 인덱스의 카운트를 하나 줄여준다.</li>\n</ol>\n<p>정렬 끝!</p>\n<h2 id=\"implement\" style=\"position:relative;\"><a href=\"#implement\" aria-label=\"implement permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Implement</h2>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token comment\">// k == max number</span>\n<span class=\"token comment\">// n == number of data in A</span>\n<span class=\"token keyword\">void</span> <span class=\"token function\">counting_sort</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> A<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> B<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> C<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n\n    <span class=\"token comment\">/* 카운팅 배열 0으로 초기화 */</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">0</span> <span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;=</span> k <span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        B<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">/* 카운팅 값 갱신  */</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;=</span> n <span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        B<span class=\"token punctuation\">[</span>A<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> B<span class=\"token punctuation\">[</span>A<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">/* 누적합 계산 */</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">;</span> i <span class=\"token operator\">&lt;=</span> k <span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        B<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> B<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span> <span class=\"token operator\">+</span> B<span class=\"token punctuation\">[</span>i<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">/* 결과 배열에 값 넣기 */</span>\n    <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> i <span class=\"token operator\">=</span> n <span class=\"token punctuation\">;</span> i <span class=\"token operator\">>=</span> n <span class=\"token punctuation\">;</span> i<span class=\"token operator\">--</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        C<span class=\"token punctuation\">[</span>B<span class=\"token punctuation\">[</span>A<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> A<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n        B<span class=\"token punctuation\">[</span>A<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> B<span class=\"token punctuation\">[</span>A<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"algorithm-analysis\" style=\"position:relative;\"><a href=\"#algorithm-analysis\" aria-label=\"algorithm analysis permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Algorithm Analysis</h2>\n<p>앞서 잠깐 언급했던 것 처럼 이 알고리즘의 치명적인 단점은 카운팅을 위한 배열의 길이가 입력받은 배열 값들 중 최댓값에 의해 결정된다는 것이다. 만약 우리가 입력받은 배열의 값들이 (1, 100000) 이라고 한다면, 이 배열은 두 개의 값만을 가지고 있음에도 불구하고 카운팅 배열의 크기는 100000으로 설정되어야 한다.</p>\n<p>또한 이 알고리즘의 시간 복잡도는 Օ(n * k) 가 되는데, 배열을 참조하는 연산 O(n) 이 B 배열의 길이인 k, 즉 배열 내의 최대 값의 길이만큼 반복되기 때문이다. 따라서 입력받은 배열의 데이터개수가 k 보다 작다면 굉장히 유용한 알고리즘이 되겠지만, k 가 더 큰경우에는 비효율적인 알고리즘이 될 수도 있다.</p>","frontmatter":{"title":"[알고리즘 정리] 계수정렬(Counting Sort)","date":"May 31, 2020"}}},"pageContext":{"slug":"/Algorithm-Analysis/2020-05-31-알고리즘-Counting-Sort/","previous":{"fields":{"slug":"/Algorithm-Analysis/2020-05-31-알고리즘-Merge-Sort/"},"frontmatter":{"title":"[알고리즘 정리] 합병정렬(Merge Sort)","category":"Algorithm-Analysis","draft":false}},"next":{"fields":{"slug":"/Operating-Systems/2020-06-09-운영체제-메인-메모리-구조/"},"frontmatter":{"title":"[운영체제] 메인 메모리의 구조","category":"Operating-Systems","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}