编辑代码

#include <stdio.h>
#include <stdlib.h>

#define MAXSUM 40

void MargeSort(int* Pre,int* Aft,int low,int end);

int main () {
    int end[MAXSUM];
    int Sort[MAXSUM];
    for(int i = 0;i<MAXSUM;i++){
        Sort[i] = rand()%(MAXSUM*2);
        end[i] = Sort[i];        
        printf("%d,",Sort[i]);
    }
    MargeSort(Sort,end,0,MAXSUM-1);
    printf("\n\n");
    for(int i = 0;i<MAXSUM;i++){
        printf("%d,",end[i]);
    }

    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
	printf("\n\n\nHello JSRUN!   \n\n         - from C .");
	return 0;
}
//这个是把First中的数组,一分为2,一份是low-mid,一份是mid-end。
//把合并后的数组存放到Second中。
void MargeMrg(int* first,int* second,int low,int end){
    int mid = (low+end)/2;
    int a = low;
    int b = mid+1;
    int flag_k = low;
    while(a<=mid&&b<=end){
        if(first[a]<first[b]) second[flag_k++] = first[a++];
        else second[flag_k++] = first[b++];
    }//这里是合并两个串串
    while(a<=mid) second[flag_k++] = first[a++];
    // printf("\n%d",a);
    while(b<=end) second[flag_k++] = first[b++];
}

void MargeSort(int* Pre,int* Aft,int low,int end){
    if(low == end) Aft[low] = Pre[low];
    else{
        int MidSort[end+1];//中间数组用于存放产生的、、
        MargeSort(Pre,MidSort,low,(low+end)/2);//这是拆分前半截
        MargeSort(Pre,MidSort,(low+end)/2+1,end);//拆分后半截
        MargeMrg(MidSort,Aft,low,end);//
    }
}