天天看點

golang快速排序算法

go語言真的是很簡潔,下面用它來實作快速排序算法

<code>package </code><code>qsort</code>

<code>func quickSort(values []</code><code>int</code><code>, left </code><code>int</code><code>, right </code><code>int</code><code>) {</code>

<code>    </code><code>if</code> <code>left &lt; right {</code>

<code>        </code><code>// 設定基準值</code>

<code>        </code><code>temp := values[left]</code>

<code>        </code><code>// 設定哨兵</code>

<code>        </code><code>i, j := left, right</code>

<code>        </code><code>for</code> <code>{</code>

<code>            </code><code>// 從右向左找,找到第一個比基準值小的數</code>

<code>            </code><code>for</code> <code>values[j] &gt;= temp &amp;&amp; i &lt; j {</code>

<code>                </code><code>j--</code>

<code>            </code><code>}</code>

<code>            </code><code>// 從左向右找,找到第一個比基準值大的數</code>

<code>            </code><code>for</code> <code>values[i] &lt;= temp &amp;&amp; i &lt; j {</code>

<code>                </code><code>i++</code>

<code>            </code><code>// 如果哨兵相遇,則退出循環</code>

<code>            </code><code>if</code> <code>i &gt;= j {</code>

<code>                </code><code>break</code>

<code>            </code><code>// 交換左右兩側的值</code>

<code>            </code><code>values[i], values[j] = values[j], values[i]</code>

<code>        </code><code>}</code>

<code>        </code><code>// 将基準值移到哨兵相遇點</code>

<code>        </code><code>values[left] = values[i]</code>

<code>        </code><code>values[i] = temp</code>

<code>        </code><code>// 遞歸,左右兩側分别排序</code>

<code>        </code><code>quickSort(values, left, i-1)</code>

<code>        </code><code>quickSort(values, i+1, right)</code>

<code>    </code><code>}</code>

<code>}</code>

<code>func QuickSort(values []</code><code>int</code><code>) {</code>

<code>    </code><code>quickSort(values, 0, len(values)-1)</code>

本文轉自 ustb80 51CTO部落格,原文連結:http://blog.51cto.com/ustb80/1575230,如需轉載請自行聯系原作者

繼續閱讀