最近对go语言发生了兴趣,发现go语言语法简洁,非常适合算法的描述和实现,于是对归并排序进行了实现。

例子中需要排序的队列是长度为100的从100到1的数列,排序算法是正序排序,排序正确的话,结果应当为1到100。

因为已设定数组最大值为100,因此“哨兵”简略设置为1000,因为不是算法核心部分,此处“哨兵”最大值处理省略。

 /*
归并排序的go语言实现
*/
package main import fmt "fmt" func main () {
/*
生成需要排序的队列100~1
*/
length:=
A:=make([]int,length)
j:=length
for i:=;i<length;i++{
A[i]=j
j--
}
/*
排序
*/
MergeSort(A,,length-)
/*
输出排序后的队列
*/
for i:=;i<length;i++{
fmt.Println(A[i])
}
}
/*
归并排序
*/
func MergeSort(Arrary []int,p int,r int) { if p<r {
q:=
if(r-q+)%=={
q=(p+r-)/
}else{
q=(p+r)/
} MergeSort(Arrary,p,q)
MergeSort(Arrary,q+,r)
Merge(Arrary,p,q,r)
}
}
/*
两列已排序的数组合并
*/
func Merge(Arrary []int,p int,q int,r int) {
n1:=q-p+
n2:=r-q L_Arr:=make([]int,(n1+))
R_Arr:=make([]int,(n2+)) for i:=;i<n1;i++{
L_Arr[i]=Arrary[p+i]
}
L_Arr[n1]=; for i:=;i<n2;i++{
R_Arr[i]=Arrary[q++i]
}
R_Arr[n2]=;
iLnum:=
iRnum:=
for i:=p;i<r+;i++{
if L_Arr[iLnum]<R_Arr[iRnum] {
Arrary[i]=L_Arr[iLnum]
iLnum++
}else{
Arrary[i]=R_Arr[iRnum]
iRnum++
}
}
}

C++实现

 #include <iostream>
using namespace std;
void MergeSort(int *,int ,int);
void Merge(int *, int, int,int);
int main(void)
{
//生成需排列的数组
int length=;
int *A=new int[length];
for(int i=,j=length;i<length;i++,j--)
{
A[i]=j;
}
MergeSort(A,,length-);
for(int i=;i<length;i++)
{
cout<<A[i]<<" ";
}
return ;
}
/*
A[p...r]
*/
void MergeSort(int *A,int p,int r)
{
if(p<r)
{
int q=;
//q要取地板,不然在q+1时会溢出
if((r-q+)%==)
{
q=(p+r-)/;
}
else
{
q=(p+r)/;
}
MergeSort(A,p,q);
MergeSort(A,q+,r);
Merge(A,p,q,r);
}
}
/*
A[p...q],A[q+1...r]
*/
void Merge(int *A,int p,int q,int r)
{
int n1=q-p+;
int n2=r-q; int *L_Arr=new int[n1+];
int *R_Arr=new int[n2+];
for(int i=;i<n1;i++)
{
L_Arr[i]=A[p+i];
}
L_Arr[n1]=;
for(int i=;i<n2;i++)
{
R_Arr[i]=A[q++i];
}
R_Arr[n2]=;
int iLnum=;
int iRnum=;
for(int i=p;i<r+;i++)
{
if(L_Arr[iLnum]<R_Arr[iRnum])
{
A[i]=L_Arr[iLnum];
iLnum++;
}
else
{
A[i]=R_Arr[iRnum];
iRnum++;
}
}
}

归并排序的go语言与C++实现对比的更多相关文章

  1. 归并排序的C语言实现

    归并排序的核心思想是 Divide-and-Conquer 算法,即将要解决的size为n的问题,分成a个size为n/b的子问题,这些子问题的结果经过O(n^d)的时间复杂度合并,即可解决最初的问题 ...

  2. 归并排序(C语言)

    合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法. 它的基本思想就是假设数组A有N个元素,那么可以看成 ...

  3. 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版

    每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...

  4. 快速排序和归并排序(C语言)

    1.0快速排序算法 (1)分解 (2)递归求解 (3)合并 int partition(int a[],int p,int r) { int i=p,j=r+1; int x=a[p]; int te ...

  5. c程序设计语言_习题7-6_对比两个输入文本文件_输出它们不同的第一行_并且要记录行号

    Write a program to compare two files, printing the first line where they differ. Here's Rick's solut ...

  6. C语言自带快速排序对比插入排序

    #include <stdio.h> #include <stdlib.h> #include <time.h> void getRandomArr (int ar ...

  7. JAVA语言对比C++语言的几个优点和自身的关键特性

    之所以写这篇博客不是为了比较JAVA语言和C++语言到底孰优孰劣,而是从语言本身出发进行对比总结程序编码设计上的差别.因水平有限,某些内容可能太过片面,欢迎指正和讨论. JAVA语言在设计上很好地借鉴 ...

  8. 学习一门新语言需要了解的基础-12 if和switch对比

    本节内容 是否存在性能差异 使用场景 反汇编对比[付费阅读] 之前初步接触了汇编,然后利用汇编简单了解下函数调用的过程,包括怎么样保护堆栈帧现场和恢复现场.另外做了简单的函数调用参数复制,返回值的传递 ...

  9. Go/Python/Erlang编程语言对比分析及示例

    本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴 ...

随机推荐

  1. Hibernate5-课程笔记4

    单表查询:   Hibernate是DAO层技术,对数据的使用,查询是最为重要的.Hibernate的查询技术非常强大,支持原始SQL语句查询,支持QBC查询及Hibernate特有的HQL查询. H ...

  2. db2 常用配置

    db2set配置: db2set DB2_ENABLE_LDAP=NO db2set DB2_ALTERNATE_GROUP_LOOKUP=GETGROUPLIST db2set DB2_RESTOR ...

  3. Ddos 攻击

    title: Ddos 防御相关 tags: Ddos, 安全, 防御 grammar_cjkRuby: true --- 防御基础 1.1. 攻击流量到底多大 谈到DDoS防御,首先就是要知道到底遭 ...

  4. Python学习笔记——基础篇【第五周】——模块

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  5. php获取url字符串截取路径的文件名和扩展名

    <?php //获取连接里边的id $url = 'http://www.rong123.com/cjbkscbsd/x_dfsdfs/24454_1_1.html'; function get ...

  6. 【IE6的疯狂之三】IE6 3像素BUG的实例

    问题:2列布局.左列固定,右列液态我需要做一个布局.2列,左边列固定宽度.右边列使用剩余宽度.整体宽度不固定,这样不管在17 还是19的屏幕上,左边列始终宽度不变,右边列宽度始终占据剩余宽度.但是我写 ...

  7. java调用wsdl xfire和cxf两种方式

    xfire 如下: String spID = ""; String password = ""; String accessCode = "&quo ...

  8. 获取控件id

    普通状态中JS获取控件IDdocument.getElementById('controlID'); JS获取父窗口控件IDwindow.parent.document.getElementById( ...

  9. GCD系列 之(二): 多核心的性能

    全局队列的并发执行 for(id obj in array) [self doSomethingIntensiveWith:obj]; 假设,每个元素要做的事情-doSomethingIntensiv ...

  10. JMeter+ant+jenkins自动化持续集成

    一.ant安装配置 1.官网下载地址:http://ant.apache.org/bindownload.cgi 对应的操作系统选择对应的版本下载,本文以windows为列,下载后解压到本地 2.设置 ...