{"componentChunkName":"component---src-templates-blog-post-js","path":"/Algorithm-Analysis/2020-05-30-알고리즘-Quick-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":"8a50d44a-c7ca-50f9-b971-56022783fd55","excerpt":"퀵소트 퀵 정렬은 이름 그대로 매우 빠르게 정렬을 수행하는 알고리즘이다. 기본적으로 분할정복의 성격을 가지고 있고 실제로도 많이 사용되는 대표적인 정렬 알고리즘이다. 동시에 자료구조 수강생들을 괴롭게 하는 친구 중 한명이긴 하지만.. Algorithm Concept 퀵 정렬은 다음과 같은 과정으로 정렬을 진행한다. 정렬은 오름차순으로 진행한다고 가정하자. 주어진 배열에서 하나의 요소를 선택하고 이를 pivot…","html":"<h2 id=\"퀵소트\" style=\"position:relative;\"><a href=\"#%ED%80%B5%EC%86%8C%ED%8A%B8\" aria-label=\"퀵소트 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>퀵소트</h2>\n<p>퀵 정렬은 이름 그대로 매우 빠르게 정렬을 수행하는 알고리즘이다. 기본적으로 분할정복의 성격을 가지고 있고 실제로도 많이 사용되는 대표적인 정렬 알고리즘이다. 동시에 자료구조 수강생들을 괴롭게 하는 친구 중 한명이긴 하지만..</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>주어진 배열에서 하나의 요소를 선택하고 이를 pivot(피벗) 으로 삼는다.</li>\n<li>배열 내부의 모든 값을 검사하면서 피벗 값보다 작은 값들은 왼쪽에, 큰 값들은 오른쪽에 배치한다.</li>\n<li>이렇게 하면 배열이 두 부분으로 나뉜다. 나뉜 이 두 개의 배열에서 각각 새로운 피벗을 만들어서 두개의 배열로 다시 쪼개어 준다.</li>\n<li>더 이상 배열을 쪼갤 수 없을 때까지 진행한다.</li>\n</ol>\n<p>이 과정은 분할 정복의 원리를 이용한 것이다. 피벗을 중심으로 문제를 <code class=\"language-text\">분할</code> 하고, 피벗을 기준으로 해서 작은 값과 큰 값을 나열하는 <code class=\"language-text\">정복</code> 과정을 거친 뒤, 모든 결과를 <code class=\"language-text\">결합</code> 해서 큰 전체 문제를 해결한다.</p>\n<h2 id=\"pivot-selection\" style=\"position:relative;\"><a href=\"#pivot-selection\" aria-label=\"pivot selection 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>Pivot Selection</h2>\n<p>퀵정렬에서 가장 핵심이 되는 부분은 어떻게 pivot을 선정하는지에 대한 부분이다. 퀵정렬의 최악의 경우의 시간복잡도는 O(N<sup>2</sup>) 이고 평균 복잡도는 𝛩(NlogN) 이기 때문에 피벗값을 잘못 선정하면 버블소트나 다름없는 성능을 보여준다.</p>\n<p>피벗에 따라 시간복잡도가 극과극인 이유는 피봇을 통해 나누는 배열의 위치 때문이다. 만약 이미 정렬된 배열이나 역순으로 정렬된 배열이 있다고 하자. 이때 가장 처음값을 피벗으로 삼게되면 퀵소트 과정은 다음과 같이 진행된다.</p>\n<ol>\n<li><code class=\"language-text\">| 1 | 2 | 3 | 4 | 5 |</code> 이런 배열이 있을때, 1을 피벗으로 선택하게 되면,</li>\n<li>1을 기준으로 1보다 작은 값은 모두 왼쪽에 두고 큰 값은 모두 오른쪽에 두어야 하는데, 1보다 작은 값은 없기 때문에, 5부터 2까지 내려오면서 1과 비교하는 연산이 n-1번 수행된다.</li>\n<li>첫 분할이 끝나고 나면 다음 피벗은 2로 지정이 될텐데 이 때 역시 비교하는 연산이 n-1번 수행된다.</li>\n<li>따라서 피벗이 n에 도달할때까지 비교연산이 계속 진행되기 때문에 시간 복잡도는 <code class=\"language-text\">n-1 * n</code> 이 되어서 O(N^2) 가 되게된다.</li>\n</ol>\n<p>반면에 배열이 정확하게 혹은 거의 근사하게 반으로 계속 나뉘어진다면 배열의 요소 갯수로 만들어지는 완전이진트리의 높이인 log n 에 대해 비교연산이 n번 수행되므로 시간 복잡도는 𝛩(nlogn) 이 된다.</p>\n<p>이런 문제점에도 불구하고 퀵소트가 여전히 빠른 알고리즘으로 인정받는 이유는 완전히 정렬된 배열에 대해 퀵정렬을 수행할 가능성이 매우 적기 때문이다.</p>\n<p>그렇다면 피봇을 어떻게 정해야지 최대한 성능을 끌어올릴 수 있을까? 일반적으로 정렬을 수행하기 위해 받는 데이터의 내부 요소들이 어떻게 배치되어 있는지 알지 못한채로 정렬을 수행하는 경우가 많다. 따라서 아무리 최악의 경우가 일어난 확률이 적다고 해도 피봇을 잘 선정해서 최악의 경우를 피하는 것은 필요할 것이다. 피봇의 선정은 대표적으로 세 개의 방법으로 나뉜다.</p>\n<ol>\n<li>첫번째 값이나 마지막 값을 피벗으로 선정한다.</li>\n<li>첫번째 값, 가운데 값, 마지막 값 중에 중간값을 피벗으로 선정한다.(Median of Three)</li>\n<li>무작위 값을 피벗으로 선정한다.</li>\n</ol>\n<p>Median of Three 를 사용하면 배열의 분할이 거의 이등분으로 유지가 될 가능성이 높기 때문에 이 방법이 가장 좋은 피벗 선정법이라고 알려져있다. 그러나 이 포스트에서는 퀵소트의 원리와 과정을 이해하기 가장 용이한 첫번째 값을 피벗으로 선정하는 방법으로 설명을 이어가도록 하겠다.</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>퀵소트 알고리즘이 어떻게 동작하는지 자세히 알아보자.</p>\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: 14.666666666666666%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAR0lEQVQI162L2QkAUQgD7b9fL7yWCMIrYD9GRmOouyczp6oW+N3OL7v83d8+nCDMvMeIGBHZUFUXPLn78v4CM9scnXPC+JMPfuDtKPMxc9cAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"1\"\n        title=\"1\"\n        src=\"/static/b8607a64bd4554ccd71909883d87366b/c1b63/1.png\"\n        srcset=\"/static/b8607a64bd4554ccd71909883d87366b/5a46d/1.png 300w,\n/static/b8607a64bd4554ccd71909883d87366b/0a47e/1.png 600w,\n/static/b8607a64bd4554ccd71909883d87366b/c1b63/1.png 1200w,\n/static/b8607a64bd4554ccd71909883d87366b/bc3ae/1.png 1268w\"\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<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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAmUlEQVQI102OzQrCMBCE++Q+g2/j0aPgWRAFlUYPaoxCs5u0+Ru78YcehvnYGdhpFueM2dphvokwvqDEgJwz+mGA9x6lFAwjhxCQUoJzrubCcheO30y6zc70WJ46rC6M6+OJ/bHF3bzgmNBZC2YGEf3d2q7yRwQafXtQaJWqTxvkCJRQxWRx02YsufpVCr91UxafsgzQWteVb+p55qb3CmzNAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"2\"\n        title=\"2\"\n        src=\"/static/99e2acacf76c72bfd853b815b4b17b7e/c1b63/2.png\"\n        srcset=\"/static/99e2acacf76c72bfd853b815b4b17b7e/5a46d/2.png 300w,\n/static/99e2acacf76c72bfd853b815b4b17b7e/0a47e/2.png 600w,\n/static/99e2acacf76c72bfd853b815b4b17b7e/c1b63/2.png 1200w,\n/static/99e2acacf76c72bfd853b815b4b17b7e/bc3ae/2.png 1268w\"\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>일단 피봇을 선정하고 피벗보다 더 작은값과 더 큰 값을 탐색할 low 와 high 를 피벗을 제외한 배열의 양끝점에 둔다.</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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAnklEQVQI112OvQ7CMAyE++Q8A2/DyMbAXKlCAiHSqQ0FNXHT/B+JCwvDJ9+dLfmaQ5+wOxvs2wBpIrxdEWJECKHgkXOGcw7ee8SSG2OQUmJd86rDd1dvm8tkcbwrnHrCpAikNZZlwTgO6K4CShN7ImK0Vuw3SlZmdxN4CMFPG6QAZA8kVz5tTSrzPGN4vrBay762+TX91+P0hpSSW34A7nnmoFbGO+8AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"3\"\n        title=\"3\"\n        src=\"/static/36579437e00e639b76e5b29a99fa6e9a/c1b63/3.png\"\n        srcset=\"/static/36579437e00e639b76e5b29a99fa6e9a/5a46d/3.png 300w,\n/static/36579437e00e639b76e5b29a99fa6e9a/0a47e/3.png 600w,\n/static/36579437e00e639b76e5b29a99fa6e9a/c1b63/3.png 1200w,\n/static/36579437e00e639b76e5b29a99fa6e9a/bc3ae/3.png 1268w\"\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>먼저 low를 계속 움직이면서 배열 요소를 검사해보자. 한칸 이동했을 때 low는 배열요소 9를 만나게 되는데, 이 값은 피벗값인 5보다 큰 값이다. low의 뒤에는 항상 피벗보다 작은 값이 있어야 하기 때문에 여기서 일단 멈춘다.</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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAp0lEQVQI1zWPyQoCMRBE58v9Bv/GozcPngURBh0cBCduZE86S5m0eCg61V2dvAybuWC1d1gfEh4ug4JHyhkppSZCrRUxRhARcus757jWWlBK4bn3njP9PJxeAduLwm42eCkDozWstRBiwXG8QmnD3hjDUkq1Sy2mm8B4ntjrltFtrz86oCSgElAiEv1IuqSUWJ5v+BDYd4I/KbXcR2rcF8HE/Td91sm/463mnSN3H08AAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"4\"\n        title=\"4\"\n        src=\"/static/a53036c095c6adb0222475dd37a138db/c1b63/4.png\"\n        srcset=\"/static/a53036c095c6adb0222475dd37a138db/5a46d/4.png 300w,\n/static/a53036c095c6adb0222475dd37a138db/0a47e/4.png 600w,\n/static/a53036c095c6adb0222475dd37a138db/c1b63/4.png 1200w,\n/static/a53036c095c6adb0222475dd37a138db/bc3ae/4.png 1268w\"\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>low가 멈추면 high를 움직인다. high를 한칸 옮기면 배열 요소 1에 도착하게 되는데 이 값은 피벗값인 5보다 작은 값이기 때문에 high의 영역에 있으면 안된다. high 도 여기서 일단 정지시킨다.</p>\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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAoklEQVQI101Puw7CMAzsl/MN/A0jGwMzAyBUkCKGNiqQR/NykiNJATGc5Dvb53O3YQmrvcH6QOAmIjgLihEpJeQPvPcIISAW3RiD+KfnnGGt/dXdaXLYXiV2TGOSGlopzPMMzjmOPYOQC9daN0gpm+ntPuJ86aEKV2Wnoh7tkAjIAUgeFJYkFUK8MPAHrHON1wTfpKHMPYXCMIzNnIhar37wBuaB5p3HCDyZAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"5\"\n        title=\"5\"\n        src=\"/static/14345b32786b4059c0d68add9ed3c785/c1b63/5.png\"\n        srcset=\"/static/14345b32786b4059c0d68add9ed3c785/5a46d/5.png 300w,\n/static/14345b32786b4059c0d68add9ed3c785/0a47e/5.png 600w,\n/static/14345b32786b4059c0d68add9ed3c785/c1b63/5.png 1200w,\n/static/14345b32786b4059c0d68add9ed3c785/bc3ae/5.png 1268w\"\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>low 와 high가 모두 중단되면 중단된 위치를 먼저 확인해본다. 만약 low 와 high가 서로 위치가 역전된 상태가 아니라면 중단된 지점에 있던 두 요소를 교환한다. 따라서 1과 9가 교환되었다.</p>\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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAApElEQVQI1z2POQ7CMBREc3LOwG0o6SioaUAoIEIkkhABtuPE68M2EsWTZkZ/rTZNYLXXrA+OQXvsMuO8xzmHtZYQQsITvMOnXGuNT1lMGGOIMTLP819Xx3FhexHsGsUoFEpKlFJM01TI+nZvqZsHOnkhRBl6bXtO5xqZvEw9mXxARXAQLQSDs6aEeVum6GVheI6Mb1H8D8PrI+m6vgzP3+T6/MEX7tHmooxJj7UAAAAASUVORK5CYII='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"6\"\n        title=\"6\"\n        src=\"/static/063e17994d36d4c2af518aed69f86fe0/c1b63/6.png\"\n        srcset=\"/static/063e17994d36d4c2af518aed69f86fe0/5a46d/6.png 300w,\n/static/063e17994d36d4c2af518aed69f86fe0/0a47e/6.png 600w,\n/static/063e17994d36d4c2af518aed69f86fe0/c1b63/6.png 1200w,\n/static/063e17994d36d4c2af518aed69f86fe0/bc3ae/6.png 1268w\"\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>다시 low를 이동시킨다. 이번에도 역시 확인한 배열요소가 피벗보다 큰 값을 가지고 있기 때문에 중단한다.</p>\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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAApUlEQVQI1zWPOw7CMBBEc3LOwG0o6SiooYACEFGEosSIOI4dfx+2EcVITzsz2t1m10Y2R8325Bl0wK0GHwLee5xzxBizAiH4ys5ZElR/WRZSShhjsNZWbi5iZX+XHFqFkAo1zyilario8LPteHQ9g/hwvt4Q48iiNVLKmplzp6gc0BA9JAfR4vP2MizbiiqvK8MoeH9yWRte/cA0TdX7Z39s8xeBL+ea5qGSUBBbAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"7\"\n        title=\"7\"\n        src=\"/static/ac327b6dd589088e0025ae50a1a68101/c1b63/7.png\"\n        srcset=\"/static/ac327b6dd589088e0025ae50a1a68101/5a46d/7.png 300w,\n/static/ac327b6dd589088e0025ae50a1a68101/0a47e/7.png 600w,\n/static/ac327b6dd589088e0025ae50a1a68101/c1b63/7.png 1200w,\n/static/ac327b6dd589088e0025ae50a1a68101/bc3ae/7.png 1268w\"\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>이제 high 를 이동시키자. high도 새로 검사한 배열의 요소가 피벗보다 작은 값을 가지고 있기 때문에 현 위치에서 중단한다.</p>\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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAo0lEQVQI1zWOuQ7CMBBE8+V8A39DSUdBjYQQRQREAuQkwvextgd7EcVIb2dnj2H3KNgcHbYngnAZKXhQziAipJRQa0XO1OrGpTB3r/ettczee8QYmYfLErAfFQ4Pg0UZGK1hjOEwq/HtPmGcXhDrB+friGUWsM5BKcUZ3Wa6+gMDCgE1ASWCUmSzX+tiDgFiXrBK3ZZ4PN8CUkru/bM/ju37jC/o2uak4sNAOwAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"8\"\n        title=\"8\"\n        src=\"/static/0bbf81d5e21a9af1d3eeb26e42380ed4/c1b63/8.png\"\n        srcset=\"/static/0bbf81d5e21a9af1d3eeb26e42380ed4/5a46d/8.png 300w,\n/static/0bbf81d5e21a9af1d3eeb26e42380ed4/0a47e/8.png 600w,\n/static/0bbf81d5e21a9af1d3eeb26e42380ed4/c1b63/8.png 1200w,\n/static/0bbf81d5e21a9af1d3eeb26e42380ed4/bc3ae/8.png 1268w\"\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>low 와 high 가 아직 교차하지 않기 때문에 두 배열 요소를 교환한다.</p>\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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAApklEQVQI1zWPywrCMBBF++V+g3/j0p0L14IIhaLSQqktmqRJ8zwmEReXe3Izk5k0h2dkd9bsL55JB9xm8CHgvcc5R0qJEHw9xxirl6z4uq6VjTFYays3t3nj2AlOT8UsFEpKlMqei3XWW0iu7Z1h6JFS0HYP+nHGaI0Qoj4qc09RWaAhekgOosU7W8MyraiwMRvjtLAsS2ad+cVHrvXuX/tjm38S+ALlaOah52d82AAAAABJRU5ErkJggg=='); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"9\"\n        title=\"9\"\n        src=\"/static/422469711289dc2e08a9b93141b37685/c1b63/9.png\"\n        srcset=\"/static/422469711289dc2e08a9b93141b37685/5a46d/9.png 300w,\n/static/422469711289dc2e08a9b93141b37685/0a47e/9.png 600w,\n/static/422469711289dc2e08a9b93141b37685/c1b63/9.png 1200w,\n/static/422469711289dc2e08a9b93141b37685/bc3ae/9.png 1268w\"\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>low가 한번 더 이동하면 피벗보다 큰 값을 만나기 때문에 다시 또 중단하게 된다.\nhigh도 한번 더 이동하면 피벗보다 작은 값을 만나기 때문에 중단하게 된다.</p>\n<p>이번 경우에는 low와 high의 위치가 역전됐기 때문에 교환되지 않고 정렬을 끝낸다.</p>\n<h3 id=\"phase-9\" style=\"position:relative;\"><a href=\"#phase-9\" aria-label=\"phase 9 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 9</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: 16.333333333333332%; position: relative; bottom: 0; left: 0; background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAADCAYAAACTWi8uAAAACXBIWXMAABYlAAAWJQFJUiTwAAAAmUlEQVQI102POQ5CMQxEc3tOwg04AwUdoqEDvkAiAr4gu7MNsQGJ4smvmLET1VpDCAGlFNRaEWOUSbkANWOtOxbbIky2Aa2g9S557z36cO4QkbhKKcEYA+ecYK39ukcKHnttsdycsNpdcJ0NDscJZ/1AHI/gHi/lDpNzhuJLLHyB+XcaXinBPWeQGaQAfbvjZb3kftmPk/zsDTTG5rLq1LBXAAAAAElFTkSuQmCC'); background-size: cover; display: block;\"\n  ></span>\n  <img\n        class=\"gatsby-resp-image-image\"\n        alt=\"10\"\n        title=\"10\"\n        src=\"/static/f5628e332a23a8b9fa69171ca27eb790/c1b63/10.png\"\n        srcset=\"/static/f5628e332a23a8b9fa69171ca27eb790/5a46d/10.png 300w,\n/static/f5628e332a23a8b9fa69171ca27eb790/0a47e/10.png 600w,\n/static/f5628e332a23a8b9fa69171ca27eb790/c1b63/10.png 1200w,\n/static/f5628e332a23a8b9fa69171ca27eb790/bc3ae/10.png 1268w\"\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>1차로 정렬이 끝나면 피벗으로 설정된 배열요소를 high가 가르키는 배열요소와 교환해준다. 이제 피벗을 중심으로 왼쪽과 오른쪽에 피벗보다 작고 큰 값들이 위치했음을 확인할 수 있다.</p>\n<h3 id=\"more\" style=\"position:relative;\"><a href=\"#more\" aria-label=\"more 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>More…</h3>\n<p>피벗을 중심으로 나뉘어진 두 그룹은 두 개의 배열처럼 취급되어서 위에서 거쳤던 과정을 똑같이 거칠 수 있다. low가 만들어낸 그룹의 피벗은 3이 될 것이고, high 가 만들어낸 그룹의 피벗은 7이 될 것이다. 이 작업을 분할된 배열의 길이가 1이나 0이 될 때까지 계속 반복한다.</p>\n<h2 id=\"implementation\" style=\"position:relative;\"><a href=\"#implementation\" aria-label=\"implementation 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>Implementation</h2>\n<div class=\"gatsby-highlight\" data-language=\"cpp\"><pre class=\"language-cpp\"><code class=\"language-cpp\"><span class=\"token macro property\"><span class=\"token directive-hash\">#</span><span class=\"token directive keyword\">include</span> <span class=\"token string\">&lt;stdio.h></span></span>\n\n<span class=\"token keyword\">int</span> <span class=\"token function\">partition</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> arr<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> p<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> r<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> low<span class=\"token punctuation\">,</span> high<span class=\"token punctuation\">;</span>\n    <span class=\"token keyword\">int</span> pivot <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">[</span>p<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// pivot 값 설정</span>\n\n    low <span class=\"token operator\">=</span> p <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// low 는 pivot의 바로 다음 위치에서부터</span>\n    high <span class=\"token operator\">=</span> r<span class=\"token punctuation\">;</span> <span class=\"token comment\">// high는 전달된 끝지점</span>\n\n    <span class=\"token keyword\">while</span><span class=\"token punctuation\">(</span>low <span class=\"token operator\">&lt;=</span> high<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">while</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span>low<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> pivot<span class=\"token punctuation\">)</span> low<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// pivot 보다 작은 값이 나올때마다 이동</span>\n        <span class=\"token keyword\">while</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span>high<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> pivot<span class=\"token punctuation\">)</span> high<span class=\"token operator\">--</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// pivot 보다 큰 값이 나올때마다 이동</span>\n\n        <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>low <span class=\"token operator\">&lt;=</span> high<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span> <span class=\"token comment\">// low와 high 가 중단된 지점이 서로 위치가 역전된 지점이 아니라면</span>\n            <span class=\"token keyword\">int</span> temp <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">[</span>low<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>    <span class=\"token comment\">// low 와 high 의 값 변경</span>\n            arr<span class=\"token punctuation\">[</span>low<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">[</span>high<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n            arr<span class=\"token punctuation\">[</span>high<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> temp<span class=\"token punctuation\">;</span>\n        <span class=\"token punctuation\">}</span>\n    <span class=\"token punctuation\">}</span>\n\n    <span class=\"token comment\">// 피벗과 high 위치 교환</span>\n    <span class=\"token keyword\">int</span> temp <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">[</span>p<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    arr<span class=\"token punctuation\">[</span>p<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">[</span>high<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n    arr<span class=\"token punctuation\">[</span>high<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> temp<span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">return</span> high<span class=\"token punctuation\">;</span> <span class=\"token comment\">// 피벗 위치 반환</span>\n\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">void</span> <span class=\"token function\">quick_sort</span><span class=\"token punctuation\">(</span><span class=\"token keyword\">int</span> arr<span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> left<span class=\"token punctuation\">,</span> <span class=\"token keyword\">int</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>left <span class=\"token operator\">&lt;</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token keyword\">int</span> pivot <span class=\"token operator\">=</span> <span class=\"token function\">partition</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n        <span class=\"token function\">quick_sort</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> pivot<span class=\"token operator\">-</span><span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 피벗을 기준으로 왼쪽 배열 정렬</span>\n        <span class=\"token function\">quick_sort</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> pivot<span class=\"token operator\">+</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 피벗 기준으로 오른쪽 배열 정렬</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n<span class=\"token keyword\">int</span> <span class=\"token function\">main</span> <span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">int</span> arr <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">{</span><span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">6</span><span class=\"token punctuation\">}</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token function\">quick_sort</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token keyword\">sizeof</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">)</span><span class=\"token operator\">/</span><span class=\"token keyword\">sizeof</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><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><span class=\"token punctuation\">;</span>\n\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> <span class=\"token keyword\">sizeof</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">)</span><span class=\"token operator\">/</span><span class=\"token keyword\">sizeof</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span><span class=\"token number\">0</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">;</span> i<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">{</span>\n        <span class=\"token function\">printf</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"%d \"</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span></code></pre></div>","frontmatter":{"title":"[알고리즘 정리] 퀵정렬(Quick Sort)","date":"May 30, 2020"}}},"pageContext":{"slug":"/Algorithm-Analysis/2020-05-30-알고리즘-Quick-Sort/","previous":{"fields":{"slug":"/Algorithm-Analysis/2020-05-29-알고리즘-Floyd-Warshall/"},"frontmatter":{"title":"[알고리즘 정리] 플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)","category":"Algorithm-Analysis","draft":false}},"next":{"fields":{"slug":"/Algorithm-Analysis/2020-05-31-알고리즘-Merge-Sort/"},"frontmatter":{"title":"[알고리즘 정리] 합병정렬(Merge Sort)","category":"Algorithm-Analysis","draft":false}}}},"staticQueryHashes":["2486386679","3128451518"]}