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:此博客图片都来源于网络
<blockquote class="layui-elem-quote" style="width: 100%;overflow:hidden">
作者: weixin_43320440
链接: https://blog.csdn.net/weixin_43320440/article/details/107717741
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
</blockquote>
到此这篇关于“Golang基础算法总结”的文章就介绍到这了,更多文章或继续浏览下面的相关文章,希望大家以后多多支持JQ教程网!
您可能感兴趣的文章:
golang基础教程
数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法
Golang笔记:语法,并发思想,web开发,Go微服务相关
GO语言零基础从入门到精通视频教程
Golang逻辑运算符短路补充
golang runtime 简析
想系统学习GO语言(Golang
学习golang开始前的准备工作
php 时间计算问题学习总结
用Golang写一个搜索引擎(0x0B)--- 第一部分结束