码迷,mamicode.com
首页 > 编程语言 > 详细

【模板】归并排序

时间:2018-07-28 15:07:53      阅读:136      评论:0      收藏:0      [点我收藏+]

标签:span   mergesort   col   数组下标   数组   逆序   sort   模板   ++   

 ps:数组下标从0开始哦!

①求逆序对版

int tmp[MAX],rec[MAX];
int sum;//求逆序对个数 
void merge(int low,int mid,int high)
{
    int i=low,j=mid+1,k=low;
    while(i<=mid&&j<=high)
    {
        if(rec[i]>rec[j]) 
        {
            tmp[k++]=rec[j++];
            sum+=mid-i+1;
        }
        else tmp[k++]=rec[i++];
    }
    while(i<=mid) tmp[k++]=rec[i++];
    while(j<=high) tmp[k++]=rec[j++];
    for(i=low;i<=high;i++) rec[i]=tmp[i];
}
void mergesort(int low,int high) 
{
    if(low<high)
    {
        int mid=(low+high)/2;
        mergesort(low,mid);
        mergesort(mid+1,high);
        merge(low,mid,high);
    }
}

 ②纯归并排序(考研)

int tmp[MAX],rec[MAX];
void merge(int low,int mid,int high)
{
    int i=low,j=mid+1,k=low;
    while(i<=mid&&j<=high)
    {
        if(rec[i]>rec[j]) 
            tmp[k++]=rec[j++];
        else tmp[k++]=rec[i++];
    }
    while(i<=mid) tmp[k++]=rec[i++];
    while(j<=high) tmp[k++]=rec[j++];
    for(i=low;i<=high;i++) rec[i]=tmp[i];
}
void mergesort(int low,int high) 
{
    if(low<high)
    {
        int mid=(low+high)/2;
        mergesort(low,mid);
        mergesort(mid+1,high);
        merge(low,mid,high);
    }
}

【模板】归并排序

标签:span   mergesort   col   数组下标   数组   逆序   sort   模板   ++   

原文地址:https://www.cnblogs.com/kannyi/p/9381733.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!