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

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

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

  1. /*
  2. 归并排序的go语言实现
  3. */
  4. package main
  5.  
  6. import fmt "fmt"
  7.  
  8. func main () {
  9. /*
  10. 生成需要排序的队列100~1
  11. */
  12. length:=
  13. A:=make([]int,length)
  14. j:=length
  15. for i:=;i<length;i++{
  16. A[i]=j
  17. j--
  18. }
  19. /*
  20. 排序
  21. */
  22. MergeSort(A,,length-)
  23. /*
  24. 输出排序后的队列
  25. */
  26. for i:=;i<length;i++{
  27. fmt.Println(A[i])
  28. }
  29. }
  30. /*
  31. 归并排序
  32. */
  33. func MergeSort(Arrary []int,p int,r int) {
  34.  
  35. if p<r {
  36. q:=
  37. if(r-q+)%=={
  38. q=(p+r-)/
  39. }else{
  40. q=(p+r)/
  41. }
  42.  
  43. MergeSort(Arrary,p,q)
  44. MergeSort(Arrary,q+,r)
  45. Merge(Arrary,p,q,r)
  46. }
  47. }
  48. /*
  49. 两列已排序的数组合并
  50. */
  51. func Merge(Arrary []int,p int,q int,r int) {
  52. n1:=q-p+
  53. n2:=r-q
  54.  
  55. L_Arr:=make([]int,(n1+))
  56. R_Arr:=make([]int,(n2+))
  57.  
  58. for i:=;i<n1;i++{
  59. L_Arr[i]=Arrary[p+i]
  60. }
  61. L_Arr[n1]=;
  62.  
  63. for i:=;i<n2;i++{
  64. R_Arr[i]=Arrary[q++i]
  65. }
  66. R_Arr[n2]=;
  67. iLnum:=
  68. iRnum:=
  69. for i:=p;i<r+;i++{
  70. if L_Arr[iLnum]<R_Arr[iRnum] {
  71. Arrary[i]=L_Arr[iLnum]
  72. iLnum++
  73. }else{
  74. Arrary[i]=R_Arr[iRnum]
  75. iRnum++
  76. }
  77. }
  78. }

C++实现

  1. #include <iostream>
  2. using namespace std;
  3. void MergeSort(int *,int ,int);
  4. void Merge(int *, int, int,int);
  5. int main(void)
  6. {
  7. //生成需排列的数组
  8. int length=;
  9. int *A=new int[length];
  10. for(int i=,j=length;i<length;i++,j--)
  11. {
  12. A[i]=j;
  13. }
  14. MergeSort(A,,length-);
  15. for(int i=;i<length;i++)
  16. {
  17. cout<<A[i]<<" ";
  18. }
  19. return ;
  20. }
  21. /*
  22. A[p...r]
  23. */
  24. void MergeSort(int *A,int p,int r)
  25. {
  26. if(p<r)
  27. {
  28. int q=;
  29. //q要取地板,不然在q+1时会溢出
  30. if((r-q+)%==)
  31. {
  32. q=(p+r-)/;
  33. }
  34. else
  35. {
  36. q=(p+r)/;
  37. }
  38. MergeSort(A,p,q);
  39. MergeSort(A,q+,r);
  40. Merge(A,p,q,r);
  41. }
  42. }
  43. /*
  44. A[p...q],A[q+1...r]
  45. */
  46. void Merge(int *A,int p,int q,int r)
  47. {
  48. int n1=q-p+;
  49. int n2=r-q;
  50.  
  51. int *L_Arr=new int[n1+];
  52. int *R_Arr=new int[n2+];
  53. for(int i=;i<n1;i++)
  54. {
  55. L_Arr[i]=A[p+i];
  56. }
  57. L_Arr[n1]=;
  58. for(int i=;i<n2;i++)
  59. {
  60. R_Arr[i]=A[q++i];
  61. }
  62. R_Arr[n2]=;
  63. int iLnum=;
  64. int iRnum=;
  65. for(int i=p;i<r+;i++)
  66. {
  67. if(L_Arr[iLnum]<R_Arr[iRnum])
  68. {
  69. A[i]=L_Arr[iLnum];
  70. iLnum++;
  71. }
  72. else
  73. {
  74. A[i]=R_Arr[iRnum];
  75. iRnum++;
  76. }
  77. }
  78. }

归并排序的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. CodeForces 711D Directed Roads

    计数,模拟. 首先观察一下给出的图的特点: $1.$一定存在环. $2.$可能存在多个环. 我们对每个环计算方案数,假设环$C$上包含$x$条边,那么把环$C$破坏掉的方案数有${2^x} - 2$种 ...

  2. 从excel读数据到informix的Found a quote for which there is no matching quote错误

    我从excel读取数据,然后存储到Informix数据库里.偶尔会发现出现Found a quote for which there is no matching quote这个错误.调试后发现,是因 ...

  3. JS定时器设置、快速取消

    1.首先定义自己的方法 function test() { alert("开始"); } 2.在定时器中使用 setInterval("test()",1000 ...

  4. ABP组件包升级

    对于abp的爱好者来说在使用abp上会面临两个问题,第一个是如何上手,第二是如何升级,然而们今天的主题是如何升级abp的组件包.目前我项目版本是0.8.2 通过官网boilerplate生成的项目前端 ...

  5. 绝对路径&相对路径

    被绝对路径和相对路径搞疯了,好多地方不一样,从今天开始,记录下来每次关于这个问题的记录,以备查用 css文件里: 绝对路径:以"/"开头,表示从项目的根目录开始

  6. Linux 网络性能tuning向导

    本文的目的不完全在于提供调优信息,而是在于告诉读者了解Linux kernel如何处理数据包,从而能够在 自己的实践中发挥Linux 内核协议栈最大的性能 The NIC ring buffer 接收 ...

  7. 汉字转全拼音函数优化方案(SQLServer),值得你看看

    函数要求实现功能 select 函数名 ('你好,我是追索') 返回的结果(ni hao , wo shi zhui suo) 解决方案一: 解决方案一 /* 根据汉字获取全拼 1.生成所有读音临时表 ...

  8. angular中的等号(==)判定

    使用angularjs的时候会使用到其中的表达式,其中有相等的判断.由于js有==和===的区别,于是就想看看是否相同.自己稍微做了一点测试,一看便知. 先给结论:angularjs表达式中的==和= ...

  9. javascript 私有方法的实现

    原文地址: http://frugalcoder.us/post/2010/02/11/js-classes.aspx Classy JavaScript - Best Practices 11. F ...

  10. 常用python处理try except异常的三种方式

    如果你在写python程序时遇到异常后想进行如下处理的话,一般用try来处理异常,假设有下面的一段程序: try:     语句1     语句2     .     .     语句N except ...