{"componentChunkName":"component---src-templates-blog-post-js","path":"/algorithm/퀵-정렬-quick-sort/","result":{"data":{"site":{"siteMetadata":{"title":"Bottlehs Tech Blog","description":"웹·앱·AI 개발자 전병훈(bottlehs)의 기술 블로그. AI·LLM, JavaScript·Vue, Spring Boot, 알고리즘, 블록체인 실무 가이드를 다룹니다","siteUrl":"https://www.bottlehs.dev","author":{"name":"Jeon Byung Hun","summary":"개발을 즐기는 bottlehs - Engineer, MS, AI, FE, BE, OS, IOT, Blockchain, 설계, 테스트"},"social":{"github":"bottlehs","codepen":"bottlehs"}}},"markdownRemark":{"id":"eb1a758b-b559-5dd9-89ca-f7a78373ce8c","excerpt":"퀵 정렬 (Quick Sort) 퀵 정렬은 분할 정복 방식으로 평균적으로 O(n log n) 시간에 정렬하는 효율적인 알고리즘이다. 피벗을 선택해 기준으로 삼고, 작은 값과 큰 값으로 분할한 뒤 재귀적으로 정렬한다. 정의 퀵 정렬은 배열에서 피벗(pivot…","html":"<p><img src=\"/assets/algorithm.png\" alt=\"퀵 정렬 (Quick Sort)\" title=\"퀵 정렬 (Quick Sort)\"></p>\n<p>퀵 정렬은 분할 정복 방식으로 평균적으로 O(n log n) 시간에 정렬하는 효율적인 알고리즘이다. 피벗을 선택해 기준으로 삼고, 작은 값과 큰 값으로 분할한 뒤 재귀적으로 정렬한다.</p>\n<h2 id=\"정의\" style=\"position:relative;\"><a href=\"#%EC%A0%95%EC%9D%98\" aria-label=\"정의 permalink\" class=\"anchor-header 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>퀵 정렬은 배열에서 피벗(pivot)을 하나 선택하고, 피벗보다 작은 값은 왼쪽에, 큰 값은 오른쪽에 배치한 뒤 양쪽을 재귀적으로 정렬하는 분할 정복 알고리즘이다. 이름처럼 평균적으로 매우 빠른 정렬 속도를 보인다.</p>\n<h2 id=\"아이디어\" style=\"position:relative;\"><a href=\"#%EC%95%84%EC%9D%B4%EB%94%94%EC%96%B4\" aria-label=\"아이디어 permalink\" class=\"anchor-header 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<ol>\n<li><strong>피벗 선택</strong>: 배열에서 하나의 원소를 피벗으로 선택한다.</li>\n<li><strong>분할</strong>: 피벗을 기준으로 작은 값은 왼쪽, 큰 값은 오른쪽으로 분할한다.</li>\n<li><strong>재귀</strong>: 왼쪽과 오른쪽 부분 배열을 각각 재귀적으로 정렬한다.</li>\n<li><strong>합치기</strong>: 이미 제자리에 있으므로 합치는 과정이 필요 없다.</li>\n</ol>\n<p>피벗이 매번 배열을 반으로 나눈다면, 깊이는 log n이 되고 각 레벨에서 n번 비교하므로 평균 시간 복잡도는 O(n log n)이다.</p>\n<h2 id=\"구현\" style=\"position:relative;\"><a href=\"#%EA%B5%AC%ED%98%84\" aria-label=\"구현 permalink\" class=\"anchor-header 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<h3 id=\"기본-구현\" style=\"position:relative;\"><a href=\"#%EA%B8%B0%EB%B3%B8-%EA%B5%AC%ED%98%84\" aria-label=\"기본 구현 permalink\" class=\"anchor-header 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>기본 구현</h3>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">quickSort</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">arr<span class=\"token punctuation\">,</span> left <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> right <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">.</span>length <span class=\"token operator\">-</span> <span class=\"token number\">1</span></span><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\">>=</span> right<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> arr<span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// 분할하고 피벗의 최종 위치 반환</span>\n  <span class=\"token keyword\">const</span> pivotIndex <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 comment\">// 왼쪽과 오른쪽 재귀적으로 정렬</span>\n  <span class=\"token function\">quickSort</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> pivotIndex <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 function\">quickSort</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> pivotIndex <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>\n\n  <span class=\"token keyword\">return</span> arr<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">partition</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> right</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 피벗을 마지막 원소로 선택</span>\n  <span class=\"token keyword\">const</span> pivot <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> left <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// 작은 원소들의 마지막 인덱스</span>\n\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> j <span class=\"token operator\">=</span> left<span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;</span> right<span class=\"token punctuation\">;</span> j<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token comment\">// 현재 원소가 피벗보다 작거나 같으면</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> pivot<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      i<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</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>\n\n  <span class=\"token comment\">// 피벗을 올바른 위치로 이동</span>\n  <span class=\"token punctuation\">[</span>arr<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> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<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><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> i <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\">const</span> arr <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">64</span><span class=\"token punctuation\">,</span> <span class=\"token number\">34</span><span class=\"token punctuation\">,</span> <span class=\"token number\">25</span><span class=\"token punctuation\">,</span> <span class=\"token number\">12</span><span class=\"token punctuation\">,</span> <span class=\"token number\">22</span><span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">,</span> <span class=\"token number\">90</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\nconsole<span class=\"token punctuation\">.</span><span class=\"token function\">log</span><span class=\"token punctuation\">(</span><span class=\"token function\">quickSort</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">[</span><span class=\"token operator\">...</span>arr<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span> <span class=\"token comment\">// [11, 12, 22, 25, 34, 64, 90]</span></code></pre></div>\n<h3 id=\"개선된-구현-피벗-선택-최적화\" style=\"position:relative;\"><a href=\"#%EA%B0%9C%EC%84%A0%EB%90%9C-%EA%B5%AC%ED%98%84-%ED%94%BC%EB%B2%97-%EC%84%A0%ED%83%9D-%EC%B5%9C%EC%A0%81%ED%99%94\" aria-label=\"개선된 구현 피벗 선택 최적화 permalink\" class=\"anchor-header 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>개선된 구현 (피벗 선택 최적화)</h3>\n<p>피벗을 항상 마지막 원소로 선택하면 이미 정렬된 배열에서 최악의 경우 O(n²)이 된다. 중앙값을 선택하거나 랜덤하게 선택하면 개선된다.</p>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">quickSortOptimized</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">arr<span class=\"token punctuation\">,</span> left <span class=\"token operator\">=</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> right <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">.</span>length <span class=\"token operator\">-</span> <span class=\"token number\">1</span></span><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\">>=</span> right<span class=\"token punctuation\">)</span> <span class=\"token keyword\">return</span> arr<span class=\"token punctuation\">;</span>\n\n  <span class=\"token comment\">// 중앙값을 피벗으로 선택</span>\n  <span class=\"token keyword\">const</span> mid <span class=\"token operator\">=</span> Math<span class=\"token punctuation\">.</span><span class=\"token function\">floor</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">(</span>left <span class=\"token operator\">+</span> right<span class=\"token punctuation\">)</span> <span class=\"token operator\">/</span> <span class=\"token number\">2</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> pivot <span class=\"token operator\">=</span> <span class=\"token function\">medianOfThree</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> mid<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">const</span> pivotIndex <span class=\"token operator\">=</span> <span class=\"token function\">partitionMedian</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">,</span> pivot<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token function\">quickSortOptimized</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> pivotIndex <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 function\">quickSortOptimized</span><span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">,</span> pivotIndex <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>\n\n  <span class=\"token keyword\">return</span> arr<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">medianOfThree</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> mid<span class=\"token punctuation\">,</span> right</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span>left<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> arr<span class=\"token punctuation\">[</span>mid<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>left<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>mid<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>mid<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>left<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span>left<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>left<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>left<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span>mid<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>mid<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>mid<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> arr<span class=\"token punctuation\">[</span>mid<span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span>\n\n<span class=\"token keyword\">function</span> <span class=\"token function\">partitionMedian</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">arr<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">,</span> right<span class=\"token punctuation\">,</span> pivot</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token comment\">// 피벗을 마지막으로 이동</span>\n  <span class=\"token keyword\">const</span> pivotIndex <span class=\"token operator\">=</span> arr<span class=\"token punctuation\">.</span><span class=\"token function\">indexOf</span><span class=\"token punctuation\">(</span>pivot<span class=\"token punctuation\">,</span> left<span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n  <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>pivotIndex<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>pivotIndex<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">let</span> i <span class=\"token operator\">=</span> left <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">for</span> <span class=\"token punctuation\">(</span><span class=\"token keyword\">let</span> j <span class=\"token operator\">=</span> left<span class=\"token punctuation\">;</span> j <span class=\"token operator\">&lt;</span> right<span class=\"token punctuation\">;</span> j<span class=\"token operator\">++</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>arr<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;=</span> pivot<span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n      i<span class=\"token operator\">++</span><span class=\"token punctuation\">;</span>\n      <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</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>\n  <span class=\"token punctuation\">[</span>arr<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> arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span>arr<span class=\"token punctuation\">[</span>right<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> arr<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><span class=\"token punctuation\">;</span>\n  <span class=\"token keyword\">return</span> i <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h3 id=\"비재귀-구현-스택-사용\" style=\"position:relative;\"><a href=\"#%EB%B9%84%EC%9E%AC%EA%B7%80-%EA%B5%AC%ED%98%84-%EC%8A%A4%ED%83%9D-%EC%82%AC%EC%9A%A9\" aria-label=\"비재귀 구현 스택 사용 permalink\" class=\"anchor-header 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>비재귀 구현 (스택 사용)</h3>\n<div class=\"gatsby-highlight\" data-language=\"javascript\"><pre class=\"language-javascript\"><code class=\"language-javascript\"><span class=\"token keyword\">function</span> <span class=\"token function\">quickSortIterative</span><span class=\"token punctuation\">(</span><span class=\"token parameter\">arr</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n  <span class=\"token keyword\">const</span> stack <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span><span class=\"token punctuation\">;</span>\n  stack<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">left</span><span class=\"token operator\">:</span> <span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">right</span><span class=\"token operator\">:</span> arr<span class=\"token punctuation\">.</span>length <span class=\"token operator\">-</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n  <span class=\"token keyword\">while</span> <span class=\"token punctuation\">(</span>stack<span class=\"token punctuation\">.</span>length <span class=\"token operator\">></span> <span class=\"token number\">0</span><span class=\"token punctuation\">)</span> <span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">const</span> <span class=\"token punctuation\">{</span> left<span class=\"token punctuation\">,</span> right <span class=\"token punctuation\">}</span> <span class=\"token operator\">=</span> stack<span class=\"token punctuation\">.</span><span class=\"token function\">pop</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">if</span> <span class=\"token punctuation\">(</span>left <span class=\"token operator\">>=</span> right<span class=\"token punctuation\">)</span> <span class=\"token keyword\">continue</span><span class=\"token punctuation\">;</span>\n\n    <span class=\"token keyword\">const</span> pivotIndex <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 comment\">// 왼쪽과 오른쪽 부분을 스택에 추가</span>\n    stack<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> left<span class=\"token punctuation\">,</span> <span class=\"token literal-property property\">right</span><span class=\"token operator\">:</span> pivotIndex <span class=\"token operator\">-</span> <span class=\"token number\">1</span> <span class=\"token punctuation\">}</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n    stack<span class=\"token punctuation\">.</span><span class=\"token function\">push</span><span class=\"token punctuation\">(</span><span class=\"token punctuation\">{</span> <span class=\"token literal-property property\">left</span><span class=\"token operator\">:</span> pivotIndex <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 punctuation\">;</span>\n  <span class=\"token punctuation\">}</span>\n\n  <span class=\"token keyword\">return</span> arr<span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">}</span></code></pre></div>\n<h2 id=\"동작-예시\" style=\"position:relative;\"><a href=\"#%EB%8F%99%EC%9E%91-%EC%98%88%EC%8B%9C\" aria-label=\"동작 예시 permalink\" class=\"anchor-header 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>배열 <code class=\"language-text\">[64, 34, 25, 12, 22, 11, 90]</code>을 정렬하는 과정:</p>\n<p><strong>1단계: 전체 배열 분할</strong></p>\n<ul>\n<li>피벗: 90 (마지막 원소)</li>\n<li>분할: [64, 34, 25, 12, 22, 11] | [90]</li>\n<li>결과: [64, 34, 25, 12, 22, 11, 90]</li>\n</ul>\n<p><strong>2단계: 왼쪽 부분 [64, 34, 25, 12, 22, 11] 정렬</strong></p>\n<ul>\n<li>피벗: 11</li>\n<li>분할: [] | [11] | [64, 34, 25, 12, 22]</li>\n<li>결과: [11, 64, 34, 25, 12, 22]</li>\n</ul>\n<p><strong>3단계: 오른쪽 부분 [64, 34, 25, 12, 22] 정렬</strong></p>\n<ul>\n<li>피벗: 22</li>\n<li>분할: [12] | [22] | [64, 34, 25]</li>\n<li>결과: [12, 22, 64, 34, 25]</li>\n</ul>\n<p><strong>최종 결과</strong>: [11, 12, 22, 25, 34, 64, 90]</p>\n<h2 id=\"시간-복잡도\" style=\"position:relative;\"><a href=\"#%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84\" aria-label=\"시간 복잡도 permalink\" class=\"anchor-header 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<ul>\n<li><strong>평균</strong>: O(n log n)</li>\n<li><strong>최선</strong>: O(n log n) - 피벗이 항상 중앙값일 때</li>\n<li><strong>최악</strong>: O(n²) - 피벗이 항상 최솟값 또는 최댓값일 때 (이미 정렬된 배열)</li>\n</ul>\n<h2 id=\"공간-복잡도\" style=\"position:relative;\"><a href=\"#%EA%B3%B5%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84\" aria-label=\"공간 복잡도 permalink\" class=\"anchor-header 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<ul>\n<li><strong>평균</strong>: O(log n) - 재귀 호출 스택</li>\n<li><strong>최악</strong>: O(n) - 불균형한 분할</li>\n</ul>\n<h2 id=\"장단점\" style=\"position:relative;\"><a href=\"#%EC%9E%A5%EB%8B%A8%EC%A0%90\" aria-label=\"장단점 permalink\" class=\"anchor-header 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<h3 id=\"장점\" style=\"position:relative;\"><a href=\"#%EC%9E%A5%EC%A0%90\" aria-label=\"장점 permalink\" class=\"anchor-header 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>장점</h3>\n<ul>\n<li>평균적으로 매우 빠름 (O(n log n))</li>\n<li>제자리 정렬 (in-place)로 추가 메모리 적음</li>\n<li>구현이 비교적 간단함</li>\n<li>실무에서 널리 사용됨</li>\n</ul>\n<h3 id=\"단점\" style=\"position:relative;\"><a href=\"#%EB%8B%A8%EC%A0%90\" aria-label=\"단점 permalink\" class=\"anchor-header 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>단점</h3>\n<ul>\n<li>최악의 경우 O(n²) 시간</li>\n<li>불안정 정렬 (stable sort 아님)</li>\n<li>재귀 호출로 인한 스택 오버플로우 가능</li>\n</ul>\n<h2 id=\"다른-정렬-알고리즘과-비교\" style=\"position:relative;\"><a href=\"#%EB%8B%A4%EB%A5%B8-%EC%A0%95%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B3%BC-%EB%B9%84%EA%B5%90\" aria-label=\"다른 정렬 알고리즘과 비교 permalink\" class=\"anchor-header 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<table>\n<thead>\n<tr>\n<th>알고리즘</th>\n<th>평균 시간</th>\n<th>최악 시간</th>\n<th>안정성</th>\n<th>제자리</th>\n</tr>\n</thead>\n<tbody>\n<tr>\n<td>퀵 정렬</td>\n<td>O(n log n)</td>\n<td>O(n²)</td>\n<td>❌</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>병합 정렬</td>\n<td>O(n log n)</td>\n<td>O(n log n)</td>\n<td>✅</td>\n<td>❌</td>\n</tr>\n<tr>\n<td>힙 정렬</td>\n<td>O(n log n)</td>\n<td>O(n log n)</td>\n<td>❌</td>\n<td>✅</td>\n</tr>\n<tr>\n<td>삽입 정렬</td>\n<td>O(n²)</td>\n<td>O(n²)</td>\n<td>✅</td>\n<td>✅</td>\n</tr>\n</tbody>\n</table>\n<h2 id=\"실무-활용\" style=\"position:relative;\"><a href=\"#%EC%8B%A4%EB%AC%B4-%ED%99%9C%EC%9A%A9\" aria-label=\"실무 활용 permalink\" class=\"anchor-header 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<ol>\n<li><strong>일반적인 정렬</strong>: 대부분의 경우 빠른 성능</li>\n<li><strong>메모리 제약</strong>: 제자리 정렬로 추가 메모리 적음</li>\n<li><strong>대용량 데이터</strong>: 평균적으로 효율적</li>\n</ol>\n<p><strong>주의사항</strong></p>\n<ul>\n<li>이미 정렬된 데이터는 최악의 경우가 될 수 있음</li>\n<li>안정성이 필요한 경우 병합 정렬 사용</li>\n<li>최악의 경우를 피하려면 피벗 선택 최적화 필요</li>\n</ul>\n<h2 id=\"데모\" style=\"position:relative;\"><a href=\"#%EB%8D%B0%EB%AA%A8\" aria-label=\"데모 permalink\" class=\"anchor-header 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><a href=\"https://codepen.io/pen/?template=yLgbWPj\">https://codepen.io/pen/?template=yLgbWPj</a></p>","tableOfContents":"<ul>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EC%A0%95%EC%9D%98\">정의</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EC%95%84%EC%9D%B4%EB%94%94%EC%96%B4\">아이디어</a></li>\n<li>\n<p><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EA%B5%AC%ED%98%84\">구현</a></p>\n<ul>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EA%B8%B0%EB%B3%B8-%EA%B5%AC%ED%98%84\">기본 구현</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EA%B0%9C%EC%84%A0%EB%90%9C-%EA%B5%AC%ED%98%84-%ED%94%BC%EB%B2%97-%EC%84%A0%ED%83%9D-%EC%B5%9C%EC%A0%81%ED%99%94\">개선된 구현 (피벗 선택 최적화)</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EB%B9%84%EC%9E%AC%EA%B7%80-%EA%B5%AC%ED%98%84-%EC%8A%A4%ED%83%9D-%EC%82%AC%EC%9A%A9\">비재귀 구현 (스택 사용)</a></li>\n</ul>\n</li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EB%8F%99%EC%9E%91-%EC%98%88%EC%8B%9C\">동작 예시</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84\">시간 복잡도</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EA%B3%B5%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84\">공간 복잡도</a></li>\n<li>\n<p><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EC%9E%A5%EB%8B%A8%EC%A0%90\">장단점</a></p>\n<ul>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EC%9E%A5%EC%A0%90\">장점</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EB%8B%A8%EC%A0%90\">단점</a></li>\n</ul>\n</li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EB%8B%A4%EB%A5%B8-%EC%A0%95%EB%A0%AC-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98%EA%B3%BC-%EB%B9%84%EA%B5%90\">다른 정렬 알고리즘과 비교</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EC%8B%A4%EB%AC%B4-%ED%99%9C%EC%9A%A9\">실무 활용</a></li>\n<li><a href=\"/algorithm/%ED%80%B5-%EC%A0%95%EB%A0%AC-quick-sort/#%EB%8D%B0%EB%AA%A8\">데모</a></li>\n</ul>","wordCount":{"words":372},"fields":{"slug":"/algorithm/퀵-정렬-quick-sort/","image":"/assets/algorithm.png","faq":[]},"frontmatter":{"title":"퀵 정렬 (Quick Sort)","date":"2025년 11월 6일","dateISO":"2025-11-06T08:43:00.000Z","updatedISO":null,"category":"algorithm","description":"퀵 정렬은 분할 정복 알고리즘으로 평균적으로 매우 빠른 정렬 알고리즘이다. 피벗을 선택해 기준으로 삼고, 작은 값과 큰 값을 분할해 재귀적으로 정렬한다.","tags":["퀵 정렬","Quick Sort","정렬","알고리즘","Algorithm","JavaScript"]}}},"pageContext":{"slug":"/algorithm/퀵-정렬-quick-sort/","previous":{"fields":{"slug":"/ai/LangChain을-활용한-LLM-애플리케이션-개발/"},"frontmatter":{"title":"LangChain을 활용한 LLM 애플리케이션 개발","tags":["LangChain","LLM","AI 애플리케이션","Chain","Agent","Memory","AI"]}},"next":{"fields":{"slug":"/springboot/Spring-AI와-엣지-배포-LLM-서비스-아키텍처-구축-가이드/"},"frontmatter":{"title":"Spring AI와 엣지 배포 LLM 서비스 아키텍처 구축 가이드","tags":["Spring AI","Spring Boot","LLM 서비스","엣지 컴퓨팅","AI 아키텍처","Observability"]}}}},"staticQueryHashes":["213619243","3262363727"]}