合并排序实现

#include

#include <stdlib.h>

void hebingpaixu(int a[],int p,int q){

    int r=q-p;

    

    if(r==1){

        if(a[p]>a[q]){

            int tmp=a[p];

            a[p]=a[q];

            a[q]=tmp;

            return;

        }

        return;

    }

    

    if(r==0){

            return;

    }

    

    

    hebingpaixu(a,p,(p+q)/2);

    hebingpaixu(a,(p+q)/2+1,q);

    

    int al1=r+1,al2=(q-p)/2+1,al3=r-(q-p)/2;

    int *array=malloc(al1*sizeof(int));

    int *array1=malloc(al2*sizeof(int));

    int *array2=malloc(al3*sizeof(int));

    

    

    

    for(int i=0;i<al2;i++){

        array1[i]=a[p+i];

    }

    

    for(int i=0;i<al3;i++){

        array2[i]=a[p+al2+i];

    }

    

    for(int i=0,m=0,n=0;i<=r;i++){

        if(array1[m]<array2[n]&&m<al2){

            array[i]=array1[m];

            m++;    

        }else{

            if(n<al3){

            array[i]=array2[n];

            n++;

            }else{

            array[i]=array1[m];

            m++;

            }            

        }

    }

    

    for(int i=0;i<al2;i++){

        printf(“array1 %d\t”,array1[i]);

    }

    printf(“\n”);

    for(int i=0;i<al3;i++){

        printf(“array2 %d\t”,array2[i]);

    }

    printf(“\n”);

    for(int i=0;i<=r;i++){

        printf(“array %d\t”,array[i]);

    }

    printf(“\n”);

    

    for(int i=0;i<=r;i++){

        a[p+i]=array[i];

    }

}

main(){

    int a[10];

    for(int i=0;i<10;i++){

        scanf(“%d”,&a[i]);

    }

    hebingpaixu(a,0,9);

    for(int i=0;i<10;i++){

        printf(“%d\t”,a[i]);

    }

    return 0;

}

点赞