归并排序的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的很多语言特性借鉴 ...
随机推荐
- chd校内选拔赛题目+题解
题目链接 A. Currency System in Geraldion 有1时,所有大于等于1的数都可由1组成.没有1时,最小不幸的数就是1. #include<iostream> ...
- JSON中JObject和JArray,JValue序列化(Linq)
http://blog.csdn.net/lovegonghui/article/details/50293629 一.JObject和JArray序列化 1.实例化JArray和JObject,然后 ...
- imx6平台qt锯齿原因分析
gbl_alpha:全局alpha 就是设置整个界面的alpha值 loc_alpha 本地alpha 就是图片里面自带的alpha值 color_key color Key 要把界面透出来,就要设置 ...
- HDU 4262 Juggler
点我看题 初步想法是模拟,找到下一个位置并记录操作数,O(n^2)肯定会超时. 那么进行优化,会发现到下一位置的操作数就是两个位置之间存在的数的个数,于是就变成了计数问题. 不难想到用树状数组或线段树 ...
- loadrunner破解方法--lm70.dll,mlr5lprg.dll下载地址
一.由于在压力测试执行中,出现一个-10803的错误 ,为解决这个错误,重新设置的环境变量,在次执行错误,这个问题解决了,但另外一个问题出来了,LR,打开脚本编辑器老提示找不到TEMP目录,当时没有想 ...
- nginx构建https
1.生成证书#openssl genrsa -des3 -out server.key 1024#openssl req -new -key server.key -out server.csr#op ...
- centos7 安装nodejs,git
yum -y install gcc make gcc-c++ openssl-devel wget 下载源码及解压: wget http://nodejs.org/dist/v0.10.26/nod ...
- Javascript获取不重复的随机数值
/** * 获取不重复随机数 * @param integer start 随机数最小值 * @param integer end 随机数最大值 * @param integer size 随机数获取 ...
- 湖南多校对抗赛(2015.05.03)Problem B: War
并查集.从后往前加边. #include<stdio.h> #include<string.h> #include<math.h> #include<algo ...
- html5--画布
简介 canvas是HTML5中的新元素,你可以使用javascript用它来绘制图形.图标.以及其它任何视觉性图像.它也可用于创建图片特效和动画.canvas 元素本身是没有绘图能力的.所有的绘制工 ...