C语言递归实现合并排序

C语言递归实现合并排序,将一串元素先进行二分,然后再左右子序列进行合并排序,类似分治思想,因为采用的是先将数组二分的方式,所以序列元素个数满足2的n次幂,其源程序如下:

#include <stdio.h>

/**********************

* function merge()

*

* A  numbers of a int type arrary

* p  index begin int type

* q  index mid int type

* r  index end int type

*

***********************/

void merge(int A[],int p,int q,int r){

    int n1,n2;

    n1=q-p+1;  //left length of A subarrary

    n2=r-q;    //right length of A subarrary

    //left and right subarrary of A

    int L[n1],R[n2];

    //temp index

    int i,j,k;

    for(i=0;i<n1;i++){

        L[i]=A[p+i];

        printf("%d ",L[i]);

    }

    printf("---------left------\n");

    for(j=0;j<n2;j++){

        /*because of repeat excute q=(p+r)/2 and j index begin 0,

        *so maybe cause p+i==q+j,the right subarrary of A,

        *R[] index is q+j+1 to void logic mistake

        **/

        R[j]=A[q+j+1];

        printf("%d ",R[j]);

    }

    printf("--------right--------\n");

    i=0;

    j=0;

    for(k=p;k<=r;k++){

        if(L[i]<=R[j]){

            A[k]=L[i];

            i++;

        }

        else {

            A[k]=R[j];

            j++;

        }

    }

}

/*********************************

* function merge_sort()

*

* A  numbers of a int type arrary

* p  index begin int type

* r  index end int type

*

* ********************************/

void merge_sort(int A[],int p,int r){

    int q;  //mid index of A

    if(p<r){

        q=(p+r)/2;

        merge_sort(A,p,q);  //left sub arrary

        merge_sort(A,q+1,r);//right sub arrary

        merge(A,p,q,r);

    }

}

int main()

{

    int p=0,r=0,A[10];

    char c;

    //input numer of A

    while (1) {

        scanf("%d",&A[r]);

        c=getchar();

        if(c=='\n')

            break;

        r++;

    }

    //use merge_sort()

    merge_sort(A,p,r);

    for(p=0;p<=r;p++)

        printf("%d ",A[p]);

    return 0;

}

/********************************

*

* input 5 2 4 7 1 3 2 6

*

* output 1 2 2 3 4 5 6 7

*********************************/

以上便是完整程序,可直接复制,粘贴,运行。同时也欢迎交流,共同进步。

运行结果如下


运行步骤
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容