教程集 www.jiaochengji.com
教程集 >  Golang编程  >  golang教程  >  正文 Golang基础算法总结

Golang基础算法总结

发布时间:2022-02-01   编辑:jiaochengji.com
教程集为您提供Golang基础算法总结等资源,欢迎您收藏本站,我们将为您提供最新的Golang基础算法总结资源
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"><path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"/></svg>

<h3>Golang基础算法总结</h3> <ul><li>基础算法的思想总结</li><li><ul><li>1.冒泡排序算法</li><li>2.选择排序算法</li><li>3.插入排序算法</li><li>4.快速排序算法</li><li>5.归并排序算法</li></ul></li></ul>

<h1>基础算法的思想总结</h1>

最近在复习算法的时候 发现之前的一些基础的算法都忘记了。就在这里总结一下和大家分享,并附上golang的代码实现。

<h2>1.冒泡排序算法</h2>

名字的由来:这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。

方法的原理:冒泡排序算法清楚地演示了排序是如何工作的,同时又简单易懂。冒泡排序步骤遍历列表并比较相邻的元素对。如果元素顺序错误,则交换它们。重复遍历列表未排序部分的元素,直到完成列表排序。
简单点来讲冒泡排序算法主要思想就是每一次确定一个值。如果是从左开始比较就是通过两两比较找到最大值。如果是从右开始比较就是两两比较找到最小值。 如下图所示
时间复杂度:因为冒泡排序重复地通过列表的未排序部分,所以它具有最坏的情况复杂度O(n^2)。

上图描述的就是从左开始比较 两两比较确定最大值的例子。

<pre><code class="lang-go hljs"><span class="token comment">//用golang实现冒泡排序</span> <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> values <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">{</span><span class="token number">5</span><span class="token punctuation">,</span><span class="token number">6</span><span class="token punctuation">,</span><span class="token number">3</span><span class="token punctuation">,</span><span class="token number">1</span><span class="token punctuation">,</span><span class="token number">8</span><span class="token punctuation">,</span><span class="token number">7</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span> <span class="token function">BubbleAsort</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span> <span class="token function">BubbleZsort</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">BubbleAsort</span><span class="token punctuation">(</span>values <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token function">len</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> <span class="token keyword">for</span> j <span class="token operator">:=</span> i<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">;</span> j <span class="token operator"><</span> <span class="token function">len</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span><span class="token punctuation">;</span> j<span class="token operator"> </span> <span class="token punctuation">{</span> <span class="token keyword">if</span> values<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">></span>values<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">{</span> values<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span>values<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> values<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span>values<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">BubbleZsort</span><span class="token punctuation">(</span>values <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> <span class="token function">len</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> <span class="token keyword">for</span> j <span class="token operator">:=</span> i<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">;</span> j <span class="token operator"><</span> <span class="token function">len</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span><span class="token punctuation">;</span> j<span class="token operator"> </span> <span class="token punctuation">{</span> <span class="token keyword">if</span> values<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator"><</span>values<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">{</span> values<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span>values<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> values<span class="token punctuation">[</span>j<span class="token punctuation">]</span><span class="token punctuation">,</span>values<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <h2>
2.选择排序算法</h2>

算法思想:线性搜索数列并找到最小值。将最小值替换为数列中最左端的数字并进行排序。如果最小值已经在最左端则不进行操作。重复此操作直到数列排序完成。
简单来说就是每次找到数列的最小值并和最左端还没确定的值进行替换。也可以找最大值和最右端没确定的值替换。 如下图所示
时间复杂度:最坏时间复杂度:O(n^2)。

上图描述的就是按照找最小值来确定位置的例子。

<pre><code class="lang-go hljs"><span class="token comment">//golang 实现选择排序算法</span> <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> numbers <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">{</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">9</span><span class="token punctuation">}</span> <span class="token function">SelectSort</span><span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">SelectSort</span><span class="token punctuation">(</span>values <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> length <span class="token operator">:=</span> <span class="token function">len</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span> <span class="token keyword">if</span> length <span class="token operator"><=</span> <span class="token number">1</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">0</span><span class="token punctuation">;</span> i <span class="token operator"><</span> length<span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> min <span class="token operator">:=</span> i <span class="token comment">// 初始的最小值位置从0开始,依次向右</span> <span class="token comment">// 从i右侧的所有元素中找出当前最小值所在的下标</span> <span class="token keyword">for</span> j <span class="token operator">:=</span> length <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">;</span> j <span class="token operator">></span> i<span class="token punctuation">;</span> j<span class="token operator">--</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> values<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator"><</span> values<span class="token punctuation">[</span>min<span class="token punctuation">]</span> <span class="token punctuation">{</span> min <span class="token operator">=</span> j <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">//fmt.Printf("i:%d min:%d\n", i, min)</span> <span class="token comment">// 把每次找出来的最小值与之前的最小值做交换</span> values<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">,</span> values<span class="token punctuation">[</span>min<span class="token punctuation">]</span> <span class="token operator">=</span> values<span class="token punctuation">[</span>min<span class="token punctuation">]</span><span class="token punctuation">,</span> values<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token comment">//fmt.Println(values)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h2>
3.插入排序算法</h2>

算法思想:左端的数字已经完成排序。取出那些尚未操作的最左端的数字将这个数字与已经完成排序的数字进行比较如果左边的数字较大则交换两个数字的位置。重复此操作直到出现一个比当前较小的数字或者数字已经到达最左端。 如下图所示
时间复杂度:最坏情况下时间复杂度为O(n^2)。最好情况下为O(n)

上图描述的就是插入排序算法的例子。

<pre><code class="lang-go hljs"><span class="token comment">// golang 实现插入排序</span> <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> numbers <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">{</span><span class="token number">6</span><span class="token punctuation">,</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token number">7</span><span class="token punctuation">,</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token number">8</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">}</span> <span class="token function">InsertSort</span><span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>numbers<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">InsertSort</span><span class="token punctuation">(</span>values <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> length <span class="token operator">:=</span> <span class="token function">len</span><span class="token punctuation">(</span>values<span class="token punctuation">)</span> <span class="token keyword">if</span> length <span class="token operator"><=</span> <span class="token number">1</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> <span class="token keyword">for</span> i <span class="token operator">:=</span> <span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator"><</span> length<span class="token punctuation">;</span> i<span class="token operator"> </span> <span class="token punctuation">{</span> tmp <span class="token operator">:=</span> values<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token comment">// 从第二个数开始,从左向右依次取数</span> key <span class="token operator">:=</span> i <span class="token operator">-</span> <span class="token number">1</span> <span class="token comment">// 下标从0开始,依次从左向右</span> <span class="token comment">// 每次取到的数都跟左侧的数做比较,如果左侧的数比取的数大,就将左侧的数右移一位,直至左侧没有数字比取的数大为止</span> <span class="token keyword">for</span> key <span class="token operator">>=</span> <span class="token number">0</span> <span class="token operator">&&</span> tmp <span class="token operator"><</span> values<span class="token punctuation">[</span>key<span class="token punctuation">]</span> <span class="token punctuation">{</span> values<span class="token punctuation">[</span>key<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> values<span class="token punctuation">[</span>key<span class="token punctuation">]</span> key<span class="token operator">--</span> <span class="token comment">//fmt.Println(values)</span> <span class="token punctuation">}</span> <span class="token comment">// 将取到的数插入到不小于左侧数的位置</span> <span class="token keyword">if</span> key<span class="token operator"> </span><span class="token number">1</span> <span class="token operator">!=</span> i <span class="token punctuation">{</span> values<span class="token punctuation">[</span>key<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">]</span> <span class="token operator">=</span> tmp <span class="token punctuation">}</span> <span class="token comment">//fmt.Println(values)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre> <h2>
4.快速排序算法</h2>

算法思想:快速排序算法与其他算法相比,它的特点是数字比较和交换的次数较少,在许多情况下可以高速地进行排序。

<ul><li>第一步:选择数列中的一个数字作为排序的基准,这个数字被称为pivot。pivot通常选择一个随机的数字,在这里我们默认选择最右边的数字作为pivot。我们把这个数字做个标记记为p。</li><li>第二步:在最左边的数字上标记为左标记,最右边的数字标记为右标记。快速排序是一种使用这些标记递归的重复一系列操作的算法。</li><li>第三步:我们将左边的标记像右移动,当左边的标记的数字超过了pivot的数字时,停止移动。之后将右标记向左移动,当右标记的数字小于pivot时停止移动。当左右侧的标记都停止时,交换这两个数字的位置。(左标记的作用是找到一个大于pivot的数字,右标记是找到小于pivot的数字,通过交换数字可以在数列的左侧收集小于pivot的数字,右侧收集大于pivot的数字)。交换之后重复第二步操作。( 情况1:当左标记找到比pivot大的数字 停止移动,右标记开始移动并且碰到了左标记所在的位置。则将当前位置的数字和pivot位置进行交换。情况2:当左标记移动和右标记碰撞时并不会停止移动,当左标记达到数列最右边时停止移动,这意味着pivot数字在这个数列里是最大值)</li><li>第四步:因为pivot已经找到了数列中的位置,则对pivot左侧和右侧的数列 分成两部分并递归的执行前三步的步骤。(当操作的数列只有一个数字 则认为已经完成了排序)</li></ul>

时间复杂度:最坏情况为O(n^2) 最好情况O(nlog(n)) 平均情况为O(nlogn)

<pre><code class="lang-go hljs"><span class="token comment">//golang实现快速排序</span> <span class="token keyword">package</span> main <span class="token keyword">import</span> <span class="token string">"fmt"</span> <span class="token comment">//[]int{1,2,3,4,5,6,7,8}</span> <span class="token keyword">func</span> <span class="token function">qsort</span><span class="token punctuation">(</span>ori <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span> <span class="token punctuation">{</span> <span class="token builtin">copy</span> <span class="token operator">:=</span> <span class="token function">append</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">{</span><span class="token punctuation">}</span><span class="token punctuation">,</span> ori<span class="token operator">...</span><span class="token punctuation">)</span> <span class="token keyword">var</span> inner <span class="token keyword">func</span><span class="token punctuation">(</span>ori <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> inner <span class="token operator">=</span> <span class="token keyword">func</span><span class="token punctuation">(</span>ori <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token function">len</span><span class="token punctuation">(</span>ori<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">0</span> <span class="token operator">||</span> <span class="token function">len</span><span class="token punctuation">(</span>ori<span class="token punctuation">)</span> <span class="token operator">==</span> <span class="token number">1</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">}</span> <span class="token comment">//找一个参考点最左边 元素个数>=2之后进行比较</span> ref <span class="token operator">:=</span> ori<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span> <span class="token keyword">var</span> i<span class="token punctuation">,</span> j <span class="token builtin">int</span> loopj <span class="token operator">:=</span> <span class="token boolean">true</span> <span class="token keyword">for</span> i<span class="token punctuation">,</span> j <span class="token operator">=</span> <span class="token number">0</span><span class="token punctuation">,</span> <span class="token function">len</span><span class="token punctuation">(</span>ori<span class="token punctuation">)</span><span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">;</span> i <span class="token operator">!=</span> j<span class="token punctuation">;</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> loopj <span class="token punctuation">{</span> <span class="token keyword">if</span> ori<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator"><</span> ref <span class="token punctuation">{</span> ori<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> ori<span class="token punctuation">[</span>j<span class="token punctuation">]</span> i<span class="token operator"> </span> <span class="token comment">//该位置已经替换需要更新</span> loopj <span class="token operator">=</span> <span class="token boolean">false</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> j<span class="token operator">--</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> ori<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">></span> ref <span class="token punctuation">{</span> ori<span class="token punctuation">[</span>j<span class="token punctuation">]</span> <span class="token operator">=</span> ori<span class="token punctuation">[</span>i<span class="token punctuation">]</span> j<span class="token operator">--</span> loopj <span class="token operator">=</span> <span class="token boolean">true</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> i<span class="token operator"> </span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> ori<span class="token punctuation">[</span>i<span class="token punctuation">]</span> <span class="token operator">=</span> ref <span class="token function">inner</span><span class="token punctuation">(</span>ori<span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">:</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token comment">//if i < len(ori) {</span> <span class="token function">inner</span><span class="token punctuation">(</span>ori<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> <span class="token comment">//equal ori[i 1:len(ori)]</span> <span class="token comment">// }</span> <span class="token punctuation">}</span> <span class="token function">inner</span><span class="token punctuation">(</span><span class="token builtin">copy</span><span class="token punctuation">)</span> <span class="token keyword">return</span> <span class="token builtin">copy</span> <span class="token punctuation">}</span> <span class="token keyword">func</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ori <span class="token operator">:=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</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">3</span><span class="token punctuation">,</span><span class="token number">2</span><span class="token punctuation">,</span><span class="token number">4</span><span class="token punctuation">}</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span><span class="token function">qsort</span><span class="token punctuation">(</span>ori<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> </code></pre> <h2>
5.归并排序算法</h2>

算法思想

<ul><li>第一步:将数字分成两半,重复此步骤直到每个数字成为一部分。</li><li>第二步:合并数字,合并时按照数字的升序移动,使得合并后的数字在组内按升序排列。递归的重复组的合并操作,直到所有数字都在一个组中。</li></ul>

时间复杂度:O(nlogn)

<pre><code class="lang-go hljs"> <span class="token comment">// golang实现归并排序</span> <span class="token keyword">package</span> main <span class="token keyword">import</span> fmt <span class="token string">"fmt"</span> <span class="token keyword">func</span> main <span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment">/* 生成需要排序的队列100~1 */</span> length<span class="token operator">:=</span><span class="token number">100</span> A<span class="token operator">:=</span><span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span>length<span class="token punctuation">)</span> j<span class="token operator">:=</span>length <span class="token keyword">for</span> i<span class="token operator">:=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>length<span class="token punctuation">;</span>i<span class="token operator"> </span><span class="token punctuation">{</span> A<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>j j<span class="token operator">--</span> <span class="token punctuation">}</span> <span class="token comment">/* 排序 */</span> <span class="token function">MergeSort</span><span class="token punctuation">(</span>A<span class="token punctuation">,</span><span class="token number">0</span><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 comment">/* 输出排序后的队列 */</span> <span class="token keyword">for</span> i<span class="token operator">:=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>length<span class="token punctuation">;</span>i<span class="token operator"> </span><span class="token punctuation">{</span> fmt<span class="token punctuation">.</span><span class="token function">Println</span><span class="token punctuation">(</span>A<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">/* 归并排序 */</span> <span class="token keyword">func</span> <span class="token function">MergeSort</span><span class="token punctuation">(</span>Arrary <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span>p <span class="token builtin">int</span><span class="token punctuation">,</span>r <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> p<span class="token operator"><</span>r <span class="token punctuation">{</span> q<span class="token operator">:=</span><span class="token number">0</span> <span class="token keyword">if</span><span class="token punctuation">(</span>r<span class="token operator">-</span>q<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">%</span><span class="token number">2</span><span class="token operator">==</span><span class="token number">0</span><span class="token punctuation">{</span> q<span class="token operator">=</span><span class="token punctuation">(</span>p<span class="token operator"> </span>r<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span> q<span class="token operator">=</span><span class="token punctuation">(</span>p<span class="token operator"> </span>r<span class="token punctuation">)</span><span class="token operator">/</span><span class="token number">2</span> <span class="token punctuation">}</span> <span class="token function">MergeSort</span><span class="token punctuation">(</span>Arrary<span class="token punctuation">,</span>p<span class="token punctuation">,</span>q<span class="token punctuation">)</span> <span class="token function">MergeSort</span><span class="token punctuation">(</span>Arrary<span class="token punctuation">,</span>q<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">,</span>r<span class="token punctuation">)</span> <span class="token function">Merge</span><span class="token punctuation">(</span>Arrary<span class="token punctuation">,</span>p<span class="token punctuation">,</span>q<span class="token punctuation">,</span>r<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token comment">/* 两列已排序的数组合并 */</span> <span class="token keyword">func</span> <span class="token function">Merge</span><span class="token punctuation">(</span>Arrary <span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span>p <span class="token builtin">int</span><span class="token punctuation">,</span>q <span class="token builtin">int</span><span class="token punctuation">,</span>r <span class="token builtin">int</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> n1<span class="token operator">:=</span>q<span class="token operator">-</span>p<span class="token operator"> </span><span class="token number">1</span> n2<span class="token operator">:=</span>r<span class="token operator">-</span>q L_Arr<span class="token operator">:=</span><span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span><span class="token punctuation">(</span>n1<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> R_Arr<span class="token operator">:=</span><span class="token function">make</span><span class="token punctuation">(</span><span class="token punctuation">[</span><span class="token punctuation">]</span><span class="token builtin">int</span><span class="token punctuation">,</span><span class="token punctuation">(</span>n2<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token keyword">for</span> i<span class="token operator">:=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n1<span class="token punctuation">;</span>i<span class="token operator"> </span><span class="token punctuation">{</span> L_Arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>Arrary<span class="token punctuation">[</span>p<span class="token operator"> </span>i<span class="token punctuation">]</span> <span class="token punctuation">}</span> L_Arr<span class="token punctuation">[</span>n1<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1000</span><span class="token punctuation">;</span> <span class="token keyword">for</span> i<span class="token operator">:=</span><span class="token number">0</span><span class="token punctuation">;</span>i<span class="token operator"><</span>n2<span class="token punctuation">;</span>i<span class="token operator"> </span><span class="token punctuation">{</span> R_Arr<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>Arrary<span class="token punctuation">[</span>q<span class="token operator"> </span><span class="token number">1</span><span class="token operator"> </span>i<span class="token punctuation">]</span> <span class="token punctuation">}</span> R_Arr<span class="token punctuation">[</span>n2<span class="token punctuation">]</span><span class="token operator">=</span><span class="token number">1000</span><span class="token punctuation">;</span> iLnum<span class="token operator">:=</span><span class="token number">0</span> iRnum<span class="token operator">:=</span><span class="token number">0</span> <span class="token keyword">for</span> i<span class="token operator">:=</span>p<span class="token punctuation">;</span>i<span class="token operator"><</span>r<span class="token operator"> </span><span class="token number">1</span><span class="token punctuation">;</span>i<span class="token operator"> </span><span class="token punctuation">{</span> <span class="token keyword">if</span> L_Arr<span class="token punctuation">[</span>iLnum<span class="token punctuation">]</span><span class="token operator"><</span>R_Arr<span class="token punctuation">[</span>iRnum<span class="token punctuation">]</span> <span class="token punctuation">{</span> Arrary<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>L_Arr<span class="token punctuation">[</span>iLnum<span class="token punctuation">]</span> iLnum<span class="token operator"> </span> <span class="token punctuation">}</span><span class="token keyword">else</span><span class="token punctuation">{</span> Arrary<span class="token punctuation">[</span>i<span class="token punctuation">]</span><span class="token operator">=</span>R_Arr<span class="token punctuation">[</span>iRnum<span class="token punctuation">]</span> iRnum<span class="token operator"> </span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> </code></pre>

ps:此博客图片都来源于网络

到此这篇关于“Golang基础算法总结”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!

您可能感兴趣的文章:
golang基础教程
数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
Golang笔记:语法,并发思想,web开发,Go微服务相关
GO语言零基础从入门到精通视频教程
Golang逻辑运算符短路补充
golang runtime 简析
想系统学习GO语言(Golang
学习golang开始前的准备工作
php 时间计算问题学习总结
用Golang写一个搜索引擎(0x0B)--- 第一部分结束

[关闭]
~ ~