编辑代码

#include <stdio.h>

// int * B = (int *)malloc(9 * sizeof(int)); // 辅助数组B
int B[8];
// 将A的两段各自有序 合成一个有序表
int i,j,k;
void Merge(int A[], int low, int mid, int high){
    for(int k = low; k <= high;k++) {
        B[k] = A[k]; // 将A中所有元素拷贝到B数组中
    }

    for(i = low, j = mid+1, k = i; i<=mid&&j<=high;k++) {
        if(B[i] <= B[j]) { //比较B的左右两段元素
            if(B[i] < B[j]) {// 将较小值复制到A中
                A[k] = B[i++];
            } else {
                A[k] = B[j++];
            }
        }
    }

    // 若第一个表未检测完,复制
    while(i<=mid) 
        A[k++] = B[i++];

    // 若第二个表未检测完,复制
    while(j<=high)
        A[k++] = B[j++];

}


// 合并
void MergeSort(int A[], int low, int high) {
    if(low < high) {
        int mid = (low + high) / 2; // 从中间划分两个子序列
        MergeSort(A, low, mid); // 对左侧子序列进行递归排序
        MergeSort(A, mid+1, high); // 对右侧子序列进行递归排序
        Merge(A, low, mid, high);// 归并
    }
}

int main () {
    //JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
	printf("Hello JSRUN!   \n\n         - from C .");


    int a[8] = {1,13,4,24,23,55,8,99};
    MergeSort(a, 1, 8);

	return 0;
}