归并排序的go语言与C++实现对比
最近对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++实现对比的更多相关文章
- 归并排序的C语言实现
归并排序的核心思想是 Divide-and-Conquer 算法,即将要解决的size为n的问题,分成a个size为n/b的子问题,这些子问题的结果经过O(n^d)的时间复杂度合并,即可解决最初的问题 ...
- 归并排序(C语言)
合并排序(MERGE SORT)是又一类不同的排序方法,合并的含义就是将两个或两个以上的有序数据序列合并成一个新的有序数据序列,因此它又叫归并算法. 它的基本思想就是假设数组A有N个元素,那么可以看成 ...
- 算法分析中最常用的几种排序算法(插入排序、希尔排序、冒泡排序、选择排序、快速排序,归并排序)C 语言版
每次开始动手写算法,都是先把插入排序,冒泡排序写一遍,十次有九次是重复的,所以这次下定决心,将所有常规的排序算法写了一遍,以便日后熟悉. 以下代码总用一个main函数和一个自定义的CommonFunc ...
- 快速排序和归并排序(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 ...
- c程序设计语言_习题7-6_对比两个输入文本文件_输出它们不同的第一行_并且要记录行号
Write a program to compare two files, printing the first line where they differ. Here's Rick's solut ...
- C语言自带快速排序对比插入排序
#include <stdio.h> #include <stdlib.h> #include <time.h> void getRandomArr (int ar ...
- JAVA语言对比C++语言的几个优点和自身的关键特性
之所以写这篇博客不是为了比较JAVA语言和C++语言到底孰优孰劣,而是从语言本身出发进行对比总结程序编码设计上的差别.因水平有限,某些内容可能太过片面,欢迎指正和讨论. JAVA语言在设计上很好地借鉴 ...
- 学习一门新语言需要了解的基础-12 if和switch对比
本节内容 是否存在性能差异 使用场景 反汇编对比[付费阅读] 之前初步接触了汇编,然后利用汇编简单了解下函数调用的过程,包括怎么样保护堆栈帧现场和恢复现场.另外做了简单的函数调用参数复制,返回值的传递 ...
- Go/Python/Erlang编程语言对比分析及示例
本文主要是介绍Go,从语言对比分析的角度切入.之所以选择与Python.Erlang对比,是因为做为高级语言,它们语言特性上有较大的相似性,不过最主要的原因是这几个我比较熟悉. Go的很多语言特性借鉴 ...
随机推荐
- AC日记——【模板】字符串哈希 洛谷 3370
题目描述 如题,给定N个字符串(第i个字符串长度为Mi,字符串内包含数字.大小写字母,大小写敏感),请求出N个字符串中共有多少个不同的字符串. 友情提醒:如果真的想好好练习哈希的话,请自觉,否则请右转 ...
- 安卓---Tabhost实现页面局部刷新--父页子页之间的传值
TabHost的实现分为两种,一个是不继承TabActivity,一个是继承自TabActivity:当然了选用继承自TabActivity的话就相对容易一些,下面来看看分别是怎样来实现的吧. 我只写 ...
- CentOS 7中将Tomcat设置为系统服务
tomcat 需要增加一个pid文件,在tomca/bin 目录下面,增加 setenv.sh 配置,catalina.sh启动的时候会调用,在该文件中添加如下内容 CATALINA_PID=&quo ...
- python 之 批量替换文件中文本后缀
代码示例如下: #!/usr/local/bin python import os def swapextensions(dir, before, after): if before[:1] != ' ...
- Ecstore安装篇-2.单机部署【linux】
单机部署实施-linux 单机部署实施-linux author :James,jimingsong@vip.qq.com since :2015-03-02 系统环境需求 软件来源 底层依赖 1. ...
- H5移动端页面设计心得分享(转载)
去年JDC出了不少优秀的武媚娘…不,H5呢,大家都很拼,同时当然也积累了一些经验和教训,今天结合咱们的实战案例,从字体,排版,动效,音效,适配性,想法这几个方面好好聊一聊关于H5的设计,希望对同学们有 ...
- 精通javasCRIPT-学习笔记 Features,Functions,Object
关于学习javasCRIPT的书,市面上太多了,有犀牛书,红宝书,但是他们都类似于一本书,包含js的一切,并没有站在一个高度上,看js的本质,我计划看一看jquery作者resig写的<精通ja ...
- @Autowired与 @Resource
@Autowired, @Resource 1.注解类型: Autowired可用于构造器.属性.方法.注解 @Target({ElementType.CONSTRUCTOR, ElementType ...
- power oj 1557种树[二进制状压DP]
题目链接[https://www.oj.swust.edu.cn/problem/show/1557] 题意:中文题目. 题解:用0,1表示某个位置是否种了树,先算出同一行的有效状态的总数,即开两个1 ...
- APP性能测试工具
各种自动化工具作用: 自动化:appium 针对接口做压测:jmeter 执行一段脚本,随机乱点:monkey 如果有用loadrunner12的话 也可以用mobilerecoder录制脚本(lr1 ...