模板归并排序
Posted kannyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了模板归并排序相关的知识,希望对你有一定的参考价值。
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); } }
以上是关于模板归并排序的主要内容,如果未能解决你的问题,请参考以下文章