zoukankan      html  css  js  c++  java
  • 归并排序


    归并排序算法实现:

    #include<stdio.h>
    #include<stdlib.h>
    #define FatalError( Str )   fprintf( stderr, "%s
    ", Str ), exit( 1 )
    typedef int ElementType;
    
    void Merge(ElementType A[],ElementType TmpArray[],int lpos,int rpos,int rightend)
    {
        int i,leftend,NumElements,TmpPos;
        leftend=rpos-1;
        TmpPos=lpos;
        NumElements=rightend-lpos+1;
        while(lpos<=leftend&&rpos<=rightend)
        {
            if(A[lpos]<=A[rpos])
                TmpArray[TmpPos++]=A[lpos++];
            else
                TmpArray[TmpPos++]=A[rpos++];
        }
        while(lpos<=leftend)
            TmpArray[TmpPos++]=A[lpos++];
        while(rpos<=rightend)
            TmpArray[TmpPos++]=A[rpos++];
        //由于每次将临时数组中的元素复制回原来数组时,不能从第一个开始复制,只是从刚刚合并的那一部分复制,所以记录要合并的长度
        for(i=0;i<NumElements;i++,rightend--)
            A[rightend]=TmpArray[rightend];
    }
    void Msort(ElementType A[],ElementType TmpArray[],int left,int right)
    {
        int Center;
        if(left<right)
        {
            Center=(left+right)/2;
            Msort(A,TmpArray,left,Center);
            Msort(A,TmpArray,Center+1,right);
            Merge(A,TmpArray,left,Center+1,right);
        }
    }
    
    void MergeSort(ElementType A[],int N)
    {
        ElementType *TmpArray;
        TmpArray=malloc(sizeof(ElementType)*N);
        if(TmpArray!=NULL)
        {
            Msort(A,TmpArray,0,N-1);
            free(TmpArray);
        }
        else
            FatalError("No space for tmp array[]");
    }
    void Print(int A[],int N)
    {
        int i;
        for(i=0;i<N;i++)
            printf(" %d ",A[i]);
    }
    int main()
    {
        int arr[10]={2,87,39,49,34,62,53,6,44,98};
        Print(arr,10);
        printf("
    ");
        MergeSort(arr,10);
        Print(arr,10);
        printf("
    ");
        return 0;
    }

    运行结果如下:

  • 相关阅读:
    1.8.4- 默认选中表单属性
    1.8.3- 单选框和复选按钮
    1.8.2- 文本框和密码
    springboot整合logback集成elk实现日志的汇总、分析、统计和检索功能
    elasticsearch kibana logstash(ELK)的安装集成应用
    sslopen RSA加解密
    Docker基本使用运行ngix镜像
    springCloud 之 Eureka注册中心高可用配置
    springCloud 之 Eureka服务治理
    springboot整合redis
  • 原文地址:https://www.cnblogs.com/wuchanming/p/3821887.html
Copyright © 2011-2022 走看看