{"componentChunkName":"component---src-templates-blog-post-js","path":"/algorithm/2022-09-18---algorithm-03/","result":{"data":{"site":{"siteMetadata":{"title":"주 1회 작성하는 개발 블로그","author":"JinhyeongKim","siteUrl":"https://bnt10.github.io","comment":{"disqusShortName":"bnt10-github-io","utterances":"JinHyongKim/blog"},"sponsor":{"buyMeACoffeeId":""}}},"markdownRemark":{"id":"5855a96c-96cb-5e95-9043-2090bf146a21","excerpt":"1. 순차탐색 1.1 정의 찾고자 하는 결과에 대해서 순차적으로 하나씩 비교하며 탐색 하는 것을 말합니다. 이를 순차 탐색(sequential search)이라 정의합니다. 하나씩 비교하며 결과에 도달하는 방식이기 때문에 최악의 경우 전체 리스트의 모든 원소와 비교해야 하는 경우가 생기게 됩니다.\n최악의 경우 n크기의 리스트에서 원소를 찾는경우 n 경우의 비교가 필요하며 이는 계산 복잡도 O(n)을 의미합니다. 1.2 코드구현 2. 선택 정렬 2.…","html":"<h1 id=\"1-순차탐색\" style=\"position:relative;\"><a href=\"#1-%EC%88%9C%EC%B0%A8%ED%83%90%EC%83%89\" aria-label=\"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>1. 순차탐색</h1>\n<h2 id=\"11-정의\" style=\"position:relative;\"><a href=\"#11-%EC%A0%95%EC%9D%98\" aria-label=\"11 정의 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>1.1 정의</h2>\n<ul>\n<li>\n<p>찾고자 하는 결과에 대해서 순차적으로 하나씩 비교하며 탐색 하는 것을 말합니다.</p>\n<p>이를 <strong>순차 탐색(sequential search)</strong>이라 정의합니다.</p>\n<p>하나씩 비교하며 결과에 도달하는 방식이기 때문에 최악의 경우 전체 리스트의 모든 원소와 비교해야 하는 경우가 생기게 됩니다.\n최악의 경우 n크기의 리스트에서 원소를 찾는경우 n 경우의 비교가 필요하며 이는 계산 복잡도 O(n)을 의미합니다.</p>\n</li>\n</ul>\n<h2 id=\"12-코드구현\" style=\"position:relative;\"><a href=\"#12-%EC%BD%94%EB%93%9C%EA%B5%AC%ED%98%84\" aria-label=\"12 코드구현 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>1.2 코드구현</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">\t<span class=\"token comment\"># 순차탐색</span>\n\n\n\t<span class=\"token keyword\">def</span> <span class=\"token function\">sequentialSearch</span><span class=\"token punctuation\">(</span>numberList<span class=\"token punctuation\">,</span> targetValue<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\n\t\t<span class=\"token comment\"># 입력: numberList:숫자 리스트, targetValue: 찾는값</span>\n\n\t\t<span class=\"token comment\"># 출력: numberList에서  targetValue 의 index</span>\n\n\t\t<span class=\"token keyword\">for</span> index <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>numberList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>  <span class=\"token comment\">#전체 리스트를 순차적으로 비교</span>\n\t\t\t<span class=\"token keyword\">if</span> targetValue <span class=\"token operator\">==</span> numberList<span class=\"token punctuation\">[</span>index<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n\n\t\t\t\t<span class=\"token keyword\">return</span> <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f'targetValue의 Index </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>index<span class=\"token punctuation\">}</span></span><span class=\"token string\">'</span></span><span class=\"token punctuation\">)</span>  <span class=\"token comment\"># targetValue의 index</span>\n\n\t\t<span class=\"token keyword\">return</span> <span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">'해당값은 존재하지 않습니다.'</span><span class=\"token punctuation\">)</span>  <span class=\"token comment\">#값이 없는 경우</span>\n\n\n\tnumList <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">]</span>\n\n\tsequentialSearch<span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span>\n\n\tsequentialSearch<span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">,</span> <span class=\"token number\">10</span><span class=\"token punctuation\">)</span></code></pre></div>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\">\t<span class=\"token comment\"># numberList에서 중복된 값들에 대한 targetIndexList 만들기</span>\n\n\n\t<span class=\"token keyword\">def</span> <span class=\"token function\">getTargetList</span><span class=\"token punctuation\">(</span>numberList<span class=\"token punctuation\">,</span> targetValue<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\n\t\ttargetIndexList <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token punctuation\">]</span>\n\t\t<span class=\"token keyword\">for</span> index <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>numberList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\t\t\t<span class=\"token keyword\">if</span> targetValue <span class=\"token operator\">==</span> numberList<span class=\"token punctuation\">[</span>index<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n\t\t\t\ttargetIndexList<span class=\"token punctuation\">.</span>append<span class=\"token punctuation\">(</span>index<span class=\"token punctuation\">)</span>\n\n\t\t<span class=\"token keyword\">if</span> targetIndexList<span class=\"token punctuation\">:</span>\n\t\t\t<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string-interpolation\"><span class=\"token string\">f'찾고자 하는 targetValueIndexList : </span><span class=\"token interpolation\"><span class=\"token punctuation\">{</span>targetIndexList<span class=\"token punctuation\">}</span></span><span class=\"token string\">'</span></span><span class=\"token punctuation\">)</span>\n\t\t<span class=\"token keyword\">else</span><span class=\"token punctuation\">:</span>\n\t\t\t<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span><span class=\"token string\">\"찾고자 하는 값이 존재하지 않습니다.\"</span><span class=\"token punctuation\">)</span>\n\n\n\tnumberList <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">]</span>\n\tgetTargetList<span class=\"token punctuation\">(</span>numberList<span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">)</span>\n\tgetTargetList<span class=\"token punctuation\">(</span>numberList<span class=\"token punctuation\">,</span> <span class=\"token number\">11</span><span class=\"token punctuation\">)</span></code></pre></div>\n<h1 id=\"2-선택-정렬\" style=\"position:relative;\"><a href=\"#2-%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC\" aria-label=\"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>2. 선택 정렬</h1>\n<h2 id=\"21-정의\" style=\"position:relative;\"><a href=\"#21-%EC%A0%95%EC%9D%98\" aria-label=\"21 정의 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>2.1 정의</h2>\n<p>주어진 리스트를 순차적으로 선택 비교하여 원하는 크기의 순서로 정렬 하는 알고리즘을 말합니다.<br>\n가장 작은 값을 찾아서 가장 앞의 값과 교환하는 방식입니다.</p>\n<ul>\n<li>주어진 리스트 중에 최소값을 찾는다.</li>\n<li>그 값을 맨 앞에 위치한 값과 교체한다(패스(pass)).</li>\n<li>맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체한다.</li>\n<li>비교하는 것이 상수 시간에 이루어진다는 가정 아래, n개의 주어진 리스트를 이와 같은 방법으로 정렬하는 데에는 Θ(n2) 만큼의 시간이 걸린다.</li>\n<li>선택 정렬은 알고리즘이 단순하며 사용할 수 있는 메모리가 제한적인 경우에 사용시 성능 상의 이점이 있다.</li>\n<li>비교 횟수가 입력 크기의 제곱에 비례하는 시간 복잡도가 O(n2)인 알고리즘</li>\n</ul>\n<h2 id=\"21-코드구현\" style=\"position:relative;\"><a href=\"#21-%EC%BD%94%EB%93%9C%EA%B5%AC%ED%98%84\" aria-label=\"21 코드구현 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>2.1 코드구현</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\">#선택정렬</span>\n<span class=\"token triple-quoted-string string\">\"\"\"\ngiven :\n  numList = [1, 5, 3, 9, 7]\n\nwhen :\n  selectionSort(numList) # numList를 선택정렬을 구현한 함수에 인자로 전달\n\nthen :\n  numList === [1, 3, 5, 7, 9] 오름 차순위로 정렬되어야 한다\n\n\"\"\"</span>\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">sortingIndex</span><span class=\"token punctuation\">(</span>x<span class=\"token punctuation\">,</span> i<span class=\"token punctuation\">,</span> j<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n\n    x<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> x<span class=\"token punctuation\">[</span>j<span class=\"token punctuation\">]</span><span class=\"token punctuation\">,</span> x<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">selectionSort</span><span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    n <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> currentIndex <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">0</span><span class=\"token punctuation\">,</span> n <span class=\"token operator\">-</span> <span class=\"token number\">1</span><span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        changeIndex <span class=\"token operator\">=</span> currentIndex\n\n        <span class=\"token comment\">#currentIndex를 기준으로 전체 list를 비교하여 가장 작은 값의 index를 구한다.</span>\n        <span class=\"token keyword\">for</span> compareIndex <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span>currentIndex <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n            <span class=\"token keyword\">if</span> numList<span class=\"token punctuation\">[</span>compareIndex<span class=\"token punctuation\">]</span> <span class=\"token operator\">&lt;</span> numList<span class=\"token punctuation\">[</span>changeIndex<span class=\"token punctuation\">]</span><span class=\"token punctuation\">:</span>\n                changeIndex <span class=\"token operator\">=</span> compareIndex\n\n        sortingIndex<span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">,</span> currentIndex<span class=\"token punctuation\">,</span> changeIndex<span class=\"token punctuation\">)</span>\n        <span class=\"token comment\">#print(numList)</span>\n\nnumList <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9</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\">3</span><span class=\"token punctuation\">]</span>\nselectionSort<span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span></code></pre></div>\n<h1 id=\"3-삽입-정렬\" style=\"position:relative;\"><a href=\"#3-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%AC\" aria-label=\"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>3. 삽입 정렬</h1>\n<h2 id=\"31-정의\" style=\"position:relative;\"><a href=\"#31-%EC%A0%95%EC%9D%98\" aria-label=\"31 정의 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>3.1 정의</h2>\n<p>삽입 정렬은 자료 배열의 모든 요소를 앞에서부터 차례대로 이미 정렬된 배열 부분과 비교하여, 자신의 위치를 찾아 삽입함으로써 정렬을 완성하는 알고리즘을 말합니다.</p>\n<p>k번째 반복 후의 결과 배열은, 앞쪽 k + 1 항목이 정렬된 상태이다.</p>\n<ul>\n<li>주어진 리스트 중에 index = 1의 값 선택 (numList[i])</li>\n<li>그 값을 맨 앞에 위치한 값과 교체</li>\n<li>맨 처음 위치를 뺀 나머지 리스트를 같은 방법으로 교체</li>\n<li>이미 정렬된 리스트의 경우가 아닌 경우 삽입 정렬의 계산 복잡도는 선택 정렬과 같은 O(n2)</li>\n</ul>\n<h2 id=\"31-코드구현\" style=\"position:relative;\"><a href=\"#31-%EC%BD%94%EB%93%9C%EA%B5%AC%ED%98%84\" aria-label=\"31 코드구현 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>3.1 코드구현</h2>\n<div class=\"gatsby-highlight\" data-language=\"python\"><pre class=\"language-python\"><code class=\"language-python\"><span class=\"token comment\"># 삽입 정렬</span>\n\n<span class=\"token keyword\">def</span> <span class=\"token function\">insertSort</span><span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n    n <span class=\"token operator\">=</span> <span class=\"token builtin\">len</span><span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span>\n    <span class=\"token keyword\">for</span> i <span class=\"token keyword\">in</span> <span class=\"token builtin\">range</span><span class=\"token punctuation\">(</span><span class=\"token number\">1</span><span class=\"token punctuation\">,</span> n<span class=\"token punctuation\">)</span><span class=\"token punctuation\">:</span>\n        insertValue <span class=\"token operator\">=</span> numList<span class=\"token punctuation\">[</span>i<span class=\"token punctuation\">]</span>\n\n        compareIndex <span class=\"token operator\">=</span> i <span class=\"token operator\">-</span> <span class=\"token number\">1</span> <span class=\"token comment\"># insertValue의 바로 이전값</span>\n\n        <span class=\"token keyword\">while</span> compareIndex <span class=\"token operator\">>=</span> <span class=\"token number\">0</span> <span class=\"token keyword\">and</span> numList<span class=\"token punctuation\">[</span>compareIndex<span class=\"token punctuation\">]</span> <span class=\"token operator\">></span> insertValue<span class=\"token punctuation\">:</span>\n            <span class=\"token comment\">#compareIndex의 value가 더 큰 경우의 값을 바로 다음 값 위치로 변경</span>\n            numList<span class=\"token punctuation\">[</span>compareIndex <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> numList<span class=\"token punctuation\">[</span>compareIndex<span class=\"token punctuation\">]</span>\n            <span class=\"token comment\">#compareIndex의 앞 값들을 비교하기 위해서 index를 하나씩 감소</span>\n            compareIndex <span class=\"token operator\">-=</span> <span class=\"token number\">1</span>\n        numList<span class=\"token punctuation\">[</span>compareIndex <span class=\"token operator\">+</span> <span class=\"token number\">1</span><span class=\"token punctuation\">]</span> <span class=\"token operator\">=</span> insertValue  <span class=\"token comment\"># 찾은 삽입 위치에 key를 저장</span>\n\n\nnumList <span class=\"token operator\">=</span> <span class=\"token punctuation\">[</span><span class=\"token number\">4</span><span class=\"token punctuation\">,</span> <span class=\"token number\">2</span><span class=\"token punctuation\">,</span> <span class=\"token number\">5</span><span class=\"token punctuation\">,</span> <span class=\"token number\">1</span><span class=\"token punctuation\">,</span> <span class=\"token number\">3</span><span class=\"token punctuation\">,</span> <span class=\"token number\">9</span><span class=\"token punctuation\">,</span> <span class=\"token number\">7</span><span class=\"token punctuation\">]</span>\ninsertSort<span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span>\n<span class=\"token keyword\">print</span><span class=\"token punctuation\">(</span>numList<span class=\"token punctuation\">)</span></code></pre></div>\n<p><img src=\"/content/insert-sort.png\" alt=\"insert-sort.png\"></p>","tableOfContents":"<ul>\n<li>\n<p><a href=\"/algorithm/2022-09-18---algorithm-03/#1-%EC%88%9C%EC%B0%A8%ED%83%90%EC%83%89\">1. 순차탐색</a></p>\n<ul>\n<li><a href=\"/algorithm/2022-09-18---algorithm-03/#11-%EC%A0%95%EC%9D%98\">1.1 정의</a></li>\n<li><a href=\"/algorithm/2022-09-18---algorithm-03/#12-%EC%BD%94%EB%93%9C%EA%B5%AC%ED%98%84\">1.2 코드구현</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/algorithm/2022-09-18---algorithm-03/#2-%EC%84%A0%ED%83%9D-%EC%A0%95%EB%A0%AC\">2. 선택 정렬</a></p>\n<ul>\n<li><a href=\"/algorithm/2022-09-18---algorithm-03/#21-%EC%A0%95%EC%9D%98\">2.1 정의</a></li>\n<li><a href=\"/algorithm/2022-09-18---algorithm-03/#21-%EC%BD%94%EB%93%9C%EA%B5%AC%ED%98%84\">2.1 코드구현</a></li>\n</ul>\n</li>\n<li>\n<p><a href=\"/algorithm/2022-09-18---algorithm-03/#3-%EC%82%BD%EC%9E%85-%EC%A0%95%EB%A0%AC\">3. 삽입 정렬</a></p>\n<ul>\n<li><a href=\"/algorithm/2022-09-18---algorithm-03/#31-%EC%A0%95%EC%9D%98\">3.1 정의</a></li>\n<li><a href=\"/algorithm/2022-09-18---algorithm-03/#31-%EC%BD%94%EB%93%9C%EA%B5%AC%ED%98%84\">3.1 코드구현</a></li>\n</ul>\n</li>\n</ul>","frontmatter":{"title":"알고리즘 기초 Chapter03","date":"September 18, 2022"}}},"pageContext":{"slug":"/algorithm/2022-09-18---algorithm-03/","previous":{"fields":{"slug":"/algorithm/2022-09-14---algorithm-02/"},"frontmatter":{"title":"알고리즘 기초 Chapter02"}},"next":{"fields":{"slug":"/algorithm/2022-09-25---algorithm-04/"},"frontmatter":{"title":"알고리즘 기초 Chapter04"}}}},"staticQueryHashes":["2486386679","3128451518"]}