归并排序求逆序对
Posted kasenbob
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序求逆序对相关的知识,希望对你有一定的参考价值。
#include<stdio.h> void Merge(int ,int ,int ); void mergeSort(int ,int ); int ch[20000],temp[20000]; int count = 0; void mergeSort(int lo,int hi) { if(lo < hi) { int mid =( lo + hi ) / 2; mergeSort(lo,mid); mergeSort(mid + 1,hi); Merge(lo,mid,hi); } } void Merge(int lo,int mid,int hi) { int i = lo; int j = mid + 1; int x = lo; while(i <= mid&&j <= hi) { if ( ch[i] > ch[j]) { count+= mid - i + 1; temp[x++] = ch[j++]; } else { temp[x++] = ch[i++]; } } while(i <= mid) temp[x++] = ch[i++]; while(j <= hi) temp[x++] = ch[j++]; for(int k = lo; k <= hi ; k++) ch[k] = temp[k]; } int main() { int N; scanf("%d",&N); for(int i=0; i < N; i++) { scanf("%d",&ch[i]); } mergeSort(0,N-1); printf("%d ",count); return 0; }
以上是关于归并排序求逆序对的主要内容,如果未能解决你的问题,请参考以下文章