归并排序

    技术2022-05-11  81

    归并排序算法C实现

    #include  < stdio.h > #include  < stdlib.h > int  numarray[ 16 =   {12,9,1,87,28,10,4,99,299,2,99,12,112,76,9,33} ; void  Merge( int  A[], int  l, int  q, int  r) {        int i,k,j;    int n1 = q-l+1;    int n2 = r-q;            int *LA = (int *)malloc(n1*sizeof(int));    int *RA = (int *)malloc(n2*sizeof(int));        for(i=0;i<n1;i++)        LA[i] = A[l+i];    for(i=0;i<n2;i++)        RA[i] = A[l+i+n1];    i=0,j=0;    for(k=0;k<r+1;k++)    {        if(i==(n1) && j==(n2))            break;        if(i==(n1) && j<(n2))        {            A[l+k] = RA[j];            j++;            continue;        }        if(i<(n1) && j==(n2))        {            A[k+l] = LA[i];            i++;            continue;        }        if(LA[i]<=RA[j])        {            A[k+l]=LA[i];            i++;            continue;        }        else        {            A[k+l]=RA[j];            j++;            continue;        }    }        free(LA);    free(RA);} void  MergeSort( int  A[], int  Left, int  Right) {    if(Left<Right)    {        int i = (Left+Right)/2;                MergeSort(A,Left,i);        MergeSort(A,i+1,Right);        Merge(A,Left,i,Right);    }} void  main() {    int m;        MergeSort(numarray,0,15);    for(m=0;m<16;m++)    {        printf("%d ",numarray[m]);    }    system("pause");}

    最新回复(0)