zoukankan      html  css  js  c++  java
  • 合并排序--分治法思想

    #include<stdio.h>
    #include<stdlib.h>
    #define MAXNUM 10000

    void Merge(int *A,int p,int q,int r)
    {
        int LeftSize=q-p+1+1;
        int RightSize=r-q+1;
        int *Left,*Right;
        int i,j,k;
        
        Left=(int*)malloc(LeftSize*sizeof(int));
        Right=(int*)malloc(RightSize*sizeof(int));

        for(i=0;i<q-p+1;i++)
            Left[i]=A[p+i];
        for(j=0;j<r-q;j++)
            Right[j]=A[q+j+1];
        
        Left[i]=MAXNUM;
        Right[j]=MAXNUM;

        for(k=p,i=0,j=0;k<r+1;k++)
            if(Left[i]<Right[j])
            {
                A[k]=Left[i];
                i++;
            }
            else
            {
                A[k]=Right[j];
                j++;
            }
            free(Left);
            free(Right);
    }

    void MergeSort(int *A,int p,int r)
    {
        int q;
        if(p<r)
        {
            q=(p+r)/2;
            MergeSort(A,p,q);
            MergeSort(A,q+1,r);
            Merge(A,p,q,r);
        }
    }
     int main()
     {
         int r[10]={1,2,3,4,5,2,3,4,5,7};
        int i;

        printf(" Before merging sort:");
            for(i=0; i<10; i++)        printf("%-3d",r[i]);
            printf(" ");
            MergeSort(r,0,9);
            printf("After merging sort:");
            for(i=0; i<10; i++)        printf("%-3d",r[i]);
            printf(" ");
            return 0;
        }

  • 相关阅读:
    神秘现象?多种情况比较
    [备忘]C++BUILDER的文件操作
    缘起
    [备忘]一个二维数组的冒泡排序
    无可救药地买入NDSL
    递归的实质
    [网游计划第九、十天]能力有限,做些小品
    大学有救
    struts2+convertion实现struts.xml的零配置
    BSD下的超级终端
  • 原文地址:https://www.cnblogs.com/jkred369/p/3574321.html
Copyright © 2011-2022 走看看