Skip to content

Commit 6622524

Browse files
committed
Site updated: 2022-07-19 17:09:02
1 parent 21fd073 commit 6622524

File tree

2 files changed

+16
-6
lines changed

2 files changed

+16
-6
lines changed

2022/07/12/十大排序算法一/index.html

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<meta property="og:image" content="http://example.com/img/0714.png">
2929
<meta property="og:image" content="http://example.com/img/0715.png">
3030
<meta property="article:published_time" content="2022-07-12T13:09:17.000Z">
31-
<meta property="article:modified_time" content="2022-07-17T15:03:07.432Z">
31+
<meta property="article:modified_time" content="2022-07-19T09:06:03.320Z">
3232
<meta property="article:author" content="cbh">
3333
<meta property="article:tag" content="C&#x2F;C++">
3434
<meta name="twitter:card" content="summary_large_image">
@@ -226,7 +226,7 @@
226226
<span class="post-meta mr-2">
227227
<i class="iconfont icon-chart"></i>
228228

229-
5.7k
229+
6.5k
230230

231231
</span>
232232

@@ -237,7 +237,7 @@
237237

238238

239239

240-
48 分钟
240+
54 分钟
241241

242242
</span>
243243

@@ -356,14 +356,24 @@ <h1 id="五快速排序"><a class="markdownIt-Anchor" href="#五快速排序"></
356356
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br></pre></td><td class="code"><pre><code class="hljs c"><span class="hljs-type">void</span> <span class="hljs-title function_">quickArr</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> left,<span class="hljs-type">int</span> right)</span><br>&#123;<br> <span class="hljs-keyword">if</span>(left&gt;=right)<br> <span class="hljs-keyword">return</span>;<br> <span class="hljs-type">int</span> i=left;<br> <span class="hljs-type">int</span> j=right;<br> <span class="hljs-type">int</span> pivot=arr[i];<br> <span class="hljs-keyword">while</span>(i&lt;j)<br> &#123;<br> <span class="hljs-keyword">while</span>(i&lt;j &amp;&amp; arr[j]&gt;=pivot)<br> j--;<br> arr[i]=arr[j];<br> <span class="hljs-keyword">while</span>(i&lt;j &amp;&amp; arr[i]&lt;=pivot)<br> i++;<br> arr[j]=arr[i];<br> &#125;<br> arr[i]=pivot; <span class="hljs-comment">//循环结束后的新轴 i=j</span><br> quickArr(arr,left,i<span class="hljs-number">-1</span>);<br> quickArr(arr,i+<span class="hljs-number">1</span>,right);<br>&#125;<br></code></pre></td></tr></table></figure>
357357
<p>考虑到数组只能进行顺序存储,故这个程序不能用于单向链表,我们对于单向链表提供如下思路:</p>
358358
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs c"><span class="hljs-type">void</span> <span class="hljs-title function_">quicksort2</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> left,<span class="hljs-type">int</span> right)</span><br>&#123;<br> <span class="hljs-keyword">if</span>(left&gt;=right)<br> <span class="hljs-keyword">return</span>;<br> <span class="hljs-type">int</span> pivot=arr[left];<br> <span class="hljs-type">int</span> i=left+<span class="hljs-number">1</span>;<br> <span class="hljs-type">int</span> j=left+<span class="hljs-number">1</span>;<br> <span class="hljs-keyword">while</span>(j&lt;=right)<br> &#123;<br> <span class="hljs-keyword">if</span>(arr[j]&lt;pivot)<br> &#123;<br> <span class="hljs-type">int</span> temp=arr[i];<br> arr[i]=arr[j];<br> arr[j]=temp;<br> i++;<br> &#125;<br> j++;<br> &#125;<br> <span class="hljs-type">int</span> temp=arr[i<span class="hljs-number">-1</span>];<br> arr[i<span class="hljs-number">-1</span>]=pivot;<br> pivot=temp;<br> quicksort2(arr,left,i<span class="hljs-number">-2</span>);<br> quicksort2(arr,i,right);<br>&#125;<br><span class="hljs-comment">// 这种方式专门针对单向链式存储</span><br></code></pre></td></tr></table></figure>
359-
<h1 id="五归并排序"><a class="markdownIt-Anchor" href="#五归并排序"></a> ()归并排序</h1>
359+
<h1 id="六归并排序"><a class="markdownIt-Anchor" href="#六归并排序"></a> ()归并排序</h1>
360360
<p>基于分而治之的思想。拿两个有序的序列重新组合成新的序列,</p>
361361
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><code class="hljs c"><span class="hljs-comment">//arr和boy默认有序</span><br><span class="hljs-type">void</span> <span class="hljs-title function_">Mergesort</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> alen,<span class="hljs-type">int</span> boy[],<span class="hljs-type">int</span> blen,<span class="hljs-type">int</span> *temp)</span><br>&#123;<br> <span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;<span class="hljs-type">int</span> j=<span class="hljs-number">0</span>;<span class="hljs-type">int</span> k=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">while</span>(i&lt;alen &amp;&amp; j&lt;blen)<br> temp[k++]=arr[i]&lt;boy[j] ? arr[i++]:boy[j++]; <br> <span class="hljs-keyword">while</span>(i&lt;alen)<br> temp[k++]=arr[i++];<br> <span class="hljs-keyword">while</span> (j&lt;blen)<br> temp[k++]=boy[j++];<br> <br>&#125;<br></code></pre></td></tr></table></figure>
362362
<p>这是基础版排序</p>
363363
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs c"><span class="hljs-type">int</span> <span class="hljs-title function_">main</span><span class="hljs-params">()</span><br>&#123;<br> <span class="hljs-type">int</span> a[<span class="hljs-number">5</span>]=&#123;<span class="hljs-number">1</span>,<span class="hljs-number">3</span>,<span class="hljs-number">5</span>,<span class="hljs-number">7</span>,<span class="hljs-number">9</span>&#125;;<br> <span class="hljs-type">int</span> b[<span class="hljs-number">4</span>]=&#123;<span class="hljs-number">2</span>,<span class="hljs-number">4</span>,<span class="hljs-number">6</span>,<span class="hljs-number">8</span>&#125;;<br> <span class="hljs-type">int</span> temp[<span class="hljs-number">9</span>];<br> Mergesort(a,<span class="hljs-number">5</span>,b,<span class="hljs-number">4</span>,temp);<br> showArr(temp,<span class="hljs-number">9</span>);<br> <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;<br>&#125;<br></code></pre></td></tr></table></figure>
364364
<p>最终归并排序</p>
365365
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br></pre></td><td class="code"><pre><code class="hljs c"><span class="hljs-type">void</span> <span class="hljs-title function_">mergeg</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> low,<span class="hljs-type">int</span> mid,<span class="hljs-type">int</span> height,<span class="hljs-type">int</span> *temp)</span><br>&#123;<br> <span class="hljs-type">int</span> i=low;<br> <span class="hljs-type">int</span> j=mid+<span class="hljs-number">1</span>;<br> <span class="hljs-type">int</span> k=low;<br> <span class="hljs-keyword">while</span>(i&lt;=mid &amp;&amp; j&lt;=height)<br> temp[k++]=arr[i]&lt;arr[j] ? arr[i++]:arr[j++];<br> <span class="hljs-keyword">while</span>(i&lt;=mid)<br> temp[k++]=arr[i++];<br> <span class="hljs-keyword">while</span>(j&lt;=height)<br> temp[k++]=arr[j++];<br> <span class="hljs-keyword">for</span>(i=low;i&lt;=height;i++)<br> arr[i]=temp[i];<br>&#125;<br><span class="hljs-type">void</span> <span class="hljs-title function_">mergeg_sort</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> low,<span class="hljs-type">int</span> height,<span class="hljs-type">int</span> *temp)</span><br>&#123;<br> <span class="hljs-keyword">if</span>(low&gt;=height)<br> <span class="hljs-keyword">return</span>;<br> <span class="hljs-type">int</span> mid=low+(height-low)/<span class="hljs-number">2</span>;<br> <span class="hljs-comment">//若用 mid=(height+low)/2可能会越界</span><br> mergeg_sort(arr,low,mid,temp);<br> mergeg_sort(arr,mid+<span class="hljs-number">1</span>,height,temp);<br> mergeg(arr,low,mid,height,temp);<br>&#125;<br><span class="hljs-type">void</span> <span class="hljs-title function_">mergegSort</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> length)</span><br>&#123;<br> <span class="hljs-type">int</span> *temp=(<span class="hljs-type">int</span>*)<span class="hljs-built_in">malloc</span>(<span class="hljs-keyword">sizeof</span>(<span class="hljs-type">int</span>)*length);<br> assert(temp);<br> mergeg_sort(arr,<span class="hljs-number">0</span>,length<span class="hljs-number">-1</span>,temp);<br> <span class="hljs-built_in">free</span>(temp);<br>&#125;<br></code></pre></td></tr></table></figure>
366-
366+
<h1 id="七计数排序"><a class="markdownIt-Anchor" href="#七计数排序"></a> (七)计数排序</h1>
367+
<p>算法思想:统计原来数组的数据,并将数据转换成为下标储存于一个临时空间中,然后遍历临时空间,把对应下标值放回原来数组。当遍历结束后,原数组就排好序了。</p>
368+
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs c"><span class="hljs-meta">#<span class="hljs-keyword">define</span> N 100</span><br><span class="hljs-type">int</span> temp[N];<span class="hljs-comment">//全局变量自动初值为零</span><br><span class="hljs-type">void</span> <span class="hljs-title function_">countSort</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> length)</span><br>&#123;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>;i&lt;length;i++)<br> temp[arr[i]]++;<br> <span class="hljs-keyword">for</span>(<span class="hljs-type">int</span> i=<span class="hljs-number">0</span>,j=<span class="hljs-number">0</span>;i&lt;N;i++)<br> <span class="hljs-keyword">while</span>(temp[i]--)<br> arr[j++]=i; <br>&#125;<br></code></pre></td></tr></table></figure>
369+
<h1 id="八基数排序"><a class="markdownIt-Anchor" href="#八基数排序"></a> (八)基数排序</h1>
370+
<p>对每位数上的数字用计数排序,与计数排序类似都是基于桶排序<br />
371+
例如:<br />
372+
234 456 121 223 416</p>
373+
<p>第一轮($ 10^0 $位上):121 223 234 456 416</p>
374+
<p>第二轮($ 10^1 $位上):416 121 223 234 456</p>
375+
<p>第三轮($ 10^2 $位上):121 223 234 416 456</p>
376+
<figure class="highlight c"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br></pre></td><td class="code"><pre><code class="hljs c"><span class="hljs-type">int</span> Temp[<span class="hljs-number">10</span>][MAXSIZE];<br><span class="hljs-type">void</span> <span class="hljs-title function_">redixSort</span><span class="hljs-params">(<span class="hljs-type">int</span> arr[],<span class="hljs-type">int</span> length)</span><br>&#123;<br> <span class="hljs-type">int</span> i,j,pos,k;<br> <span class="hljs-keyword">for</span>(k=<span class="hljs-number">10</span>;k&lt;<span class="hljs-number">1000</span>;k*=<span class="hljs-number">10</span>)<br> &#123;<br> <span class="hljs-keyword">for</span>(i=<span class="hljs-number">0</span>;i&lt;length;i++)<br> &#123;<br> j=<span class="hljs-number">0</span>;<br> pos=(arr[i]%k)/(k/<span class="hljs-number">10</span>);<br> <span class="hljs-keyword">while</span>(Temp[pos][j])<br> j++;<br> Temp[pos][j]=arr[i];<br> &#125;<br> pos=<span class="hljs-number">0</span>;<br> <span class="hljs-keyword">for</span>(i=<span class="hljs-number">0</span>;i&lt;<span class="hljs-number">10</span>;i++)<br> &#123;<br> <span class="hljs-keyword">for</span>(j=<span class="hljs-number">0</span>;j&lt;length &amp;&amp; Temp[i][j] !=<span class="hljs-number">0</span>;j++)<br> &#123;<br> arr[pos++]=Temp[i][j];<br> Temp[i][j]=<span class="hljs-number">0</span>;<br> &#125;<br> &#125;<br> &#125;<br>&#125;<br></code></pre></td></tr></table></figure>
367377

368378
</div>
369379

0 commit comments

Comments
 (0)