zoukankan      html  css  js  c++  java
  • 归并排序的go语言与C++实现对比

    最近对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:=100
    13     A:=make([]int,length)
    14     j:=length
    15     for i:=0;i<length;i++{
    16         A[i]=j
    17         j--
    18     }
    19     /*
    20     排序
    21     */
    22     MergeSort(A,0,length-1)
    23     /*
    24     输出排序后的队列
    25     */
    26     for i:=0;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:=0
    37         if(r-q+1)%2==0{
    38             q=(p+r-1)/2
    39         }else{
    40             q=(p+r)/2
    41         }
    42 
    43         MergeSort(Arrary,p,q)
    44         MergeSort(Arrary,q+1,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+1
    53     n2:=r-q
    54 
    55     L_Arr:=make([]int,(n1+1))
    56     R_Arr:=make([]int,(n2+1))
    57 
    58     for i:=0;i<n1;i++{
    59         L_Arr[i]=Arrary[p+i]
    60     }
    61     L_Arr[n1]=1000;
    62 
    63     for i:=0;i<n2;i++{
    64         R_Arr[i]=Arrary[q+1+i]
    65     }
    66     R_Arr[n2]=1000;
    67     iLnum:=0
    68     iRnum:=0
    69     for i:=p;i<r+1;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=100;
     9     int *A=new int[length];
    10     for(int i=0,j=length;i<length;i++,j--)
    11     {
    12         A[i]=j;
    13     }
    14     MergeSort(A,0,length-1);
    15     for(int i=0;i<length;i++)
    16     {
    17         cout<<A[i]<<" ";
    18     }
    19     return 0;
    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=0;
    29                 //q要取地板,不然在q+1时会溢出
    30         if((r-q+1)%2==0)
    31         {
    32             q=(p+r-1)/2;
    33         }
    34         else
    35         {
    36             q=(p+r)/2;
    37         }
    38         MergeSort(A,p,q);
    39         MergeSort(A,q+1,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+1;
    49     int n2=r-q;
    50 
    51     int *L_Arr=new int[n1+1];
    52     int *R_Arr=new int[n2+1];
    53     for(int i=0;i<n1;i++)
    54     {
    55         L_Arr[i]=A[p+i];
    56     }
    57     L_Arr[n1]=1000;
    58     for(int i=0;i<n2;i++)
    59     {
    60         R_Arr[i]=A[q+1+i];
    61     }
    62     R_Arr[n2]=1000;
    63     int iLnum=0;
    64     int iRnum=0;
    65     for(int i=p;i<r+1;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 }
  • 相关阅读:
    软件工程综合实践专题-第四次作业
    软件工程综合实践专题-第三次作业
    软件工程综合实践专题-第二次作业
    软件工程综合实践专题-第一次作业
    day14天作业
    day14 Linux特殊权限介绍
    day13 Linux文件和目录权限作业
    day13作业
    day13 Linux系统权限位介绍
    day12作业
  • 原文地址:https://www.cnblogs.com/bindong/p/5861962.html
Copyright © 2011-2022 走看看