归并排序-二路排序算法

//归并排序—二路归并排序

int *B = (int *)malloc(n*sizeof(int));//辅助数组B,n要A数组需要归并的数量(high-low)


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);        //归并
    }//if
}


void Merge(int A[],int low,int mid,int high){ //归并算法,将两个有序表组合成一个新的有序表
    int i,j,k;
    for(k=low;k<=high;K++)                      //将A数组复制到B数组
        B[k]= A[k];
    
    for(i=low,j=mid+1,k=i;i<=mid&&j<=high;k++){     //比较B的左右两半部分中的元素
        if(B[i]<B[j])                               //若B[i]小,将B[i]复制到A[k]
            A[k]=B[i++];
        else                                        //若B[j]小,将B[i]复制到A[k]
            A[k]=B[j++];
    }

    while(i<=mid)                                   //若左半部分未检测完,剩余部分复制到A
        A[k++]=B[i++];  
    while(j<=high)                                  //若右半部分未检测完,剩余部分复制到A
        A[k++]=B[j++];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值