#include <stdio.h> #include <string.h> using namespace std; const int mm = 1009; int f[mm],nCount; void Merge(int l,int mid1,int mid2,int r,int*f) { int t[mm],pos = 0,i=l,j=mid2; while(i <= mid1 && j <= r) { if(f[i]<=f[j]) t[pos++] = f[i++]; else { t[pos++] = f[j++]; //i位后的都比f[j] 大 nCount += mid1-i+1;//j-mid2+1; } } while(i <= mid1) t[pos++] = f[i++]; while(j <= r) t[pos++] = f[j++]; for(int i=0;i<pos;++i) f[l+i] = t[i]; } void MergeSort(int l,int r,int*f) { int mid = (l+r)/2; if(l == r) return; MergeSort(l,mid,f); MergeSort(mid+1,r,f); Merge(l,mid,mid+1,r,f); } int main() { int n; while(~scanf("%d",&n)) { for(int i=0;i<n;++i) scanf("%d",&f[i]); nCount = 0; MergeSort(0,n-1,f); printf("ni: %d\n",nCount); for(int i=0;i<n;++i) printf("%d ",f[i]); putchar('\n'); } return 0; }
归并排序求逆序数
转载
The article write by nealgavin
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
单链表逆序有哪几种方法
单链表逆序
链表 递归 Data -
HDU 4911(归并排序求逆序数)
InversionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Other
HDU 4911 归并排序求逆序数 逆序数 #include 数组 -
蓝桥 小朋友排队 (归并排序求逆序数)
题目描述n 个小朋友站成一排。现在要把他们按身高从低到高的顺
#include i++ 数据 -
杭电6318(归并排序)逆序数(java)
归并排序是采用分冶实现的,其核心思想就是分冶得到两边经过递归是有序的,(因为分到最后就是两个元素的比较。 举个例
归并排序 逆序数 java 递归 i++ -
hdu 3743 Frosh Week (归并排序·逆序数)
题目:http://acm.hdu.edu.cn/showproble
hdu 归并排序 逆序数 i++ 逆序 -
归并排序 逆序数
很好理解:
i++ -
归并排序求逆序对数
Codevs
i++ ios #include 逆序对 编程题目