最近对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. hdu1036

    #include<stdio.h>int main(){ int n; double d; int num; char h,m1,m2,s1,s2; scanf("%d" ...

  2. 伪AP检测技术研究

    转载自:http://www.whitecell-club.org/?p=310 随着城市无线局域网热点在公共场所大规模的部署,无线局域网安全变得尤为突出和重要,其中伪AP钓鱼攻击是无线网络中严重的安 ...

  3. java中的反编译

    使用JD-GUI工具  支持mac os 和 windows  地址为:http://jd.benow.ca

  4. Mysql的热备份[转载]

    学一点 mysql 双机异地热备份----快速理解mysql主从,主主备份原理及实践 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始 ...

  5. 手动添加PopMenu出现的问题

    最近在github上找了个比较酷的弹出菜单PopMenu用来做分享页面,demo下载运行OK,于是拖进项目中,一编译就呵呵了.... 一看demo目录,原来这还还引用了其他库,于是把pod下面的pop ...

  6. VB ListBox 添加横向滚动条

    Private Declare Function SendMessage Lib "user32 " Alias "SendMessageA" (ByVal h ...

  7. matlab读xls数据

    [ndata,label,abalone]=xlsread('data.xls') ndata:表示数字属性 label:表示类别属性 abalone:全部数据

  8. [Centos] mod_wsgi 安装流程以及遇到问题解决办法。apxs: command not found 或 Sorry, Python developer package does not appear to be installed.

    前提: Centos 系统, apache 已安装, python 已安装. 1. 首先下载mod_wsgi-3.5.tar.gz 下载地址:https://code.google.com/p/mod ...

  9. FileReader和FileInputStream的区别

    1.FileReader和FileInputStream的区别: FileReader.FileWriter处理的是文本文件. FileInputStream/FileOutputStream是继承I ...

  10. Math.round(),Math.ceil(),Math.floor()的区别

    1.Math.round():根据"round"的字面意思"附近.周围",可以猜测该函数是求一个附近的整数,看下面几个例子就明白. 小数点后第一位<5 正 ...