归并排序(C)

归并排序也是典型的分治算法

#include"../init.h"

void Merge(RedType *old_node, RedType *new_node, int start, int mid, int end){
     int i,j,k;
     for(k=i=start,j=mid+1; i<=mid&&j<=end; k++){
        if(old_node[i].key > old_node[j].key){
            new_node[k] = old_node[j++];
        }else{
            new_node[k] = old_node[i++];
        }
     }
     while(i <= mid){
         new_node[k++] = old_node[i++];
     }
     while(j <= end){
        new_node[k++] = old_node[j++];
     }
}


void MSort(RedType *old_node, RedType *new_node, int start, int end){
    //start == end,即长度为1时,递归出口
    if(start == end){
        new_node[start] = old_node[start];
    }else{
        RedType S[MAXSIZE];
        int mid = (start + end) / 2;
        MSort(old_node,S,start,mid);
        MSort(old_node,S,mid+1,end);
        Merge(S,new_node,start,mid,end);
    }
}

void MergeSort(Sqlist *p){
    MSort((*p).r, (*p).r, 1,(*p).length);
}

int main(){
    Sqlist L;
    init(&L);
    MergeSort(&L);
    show(L.r);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值