数组中的逆序对
2016-09-17 14:25
309 查看
求数组中的逆序对实际上有两种方法第一种直接暴力解决,两次循环,搞定,但是时间复杂度较高o(n^2),
另一种方法就是利用归并排序的方法,时间复杂度也就是归并排序的时间复杂度是O(N*lnN)时间紧迫直接上代码:
另一种方法就是利用归并排序的方法,时间复杂度也就是归并排序的时间复杂度是O(N*lnN)时间紧迫直接上代码:
#include <iostream>; using namespace std; int InversePairsCore(int*arr,int start,int end,int*copy) { if(start>=end) { copy[start]=arr[start]; return 0; } int mid=(end+start)/2; int left=InversePairsCore(arr,start,mid,copy); int right=InversePairsCore(arr,mid+1,end,copy); int i=start; int j=mid+1; int index=start; int count=0; while(i<=mid&&j<=end) { if(arr[i]>arr[j]) { count=mid-i+1+count; copy[index]=arr[j]; ++j; } else{ copy[index]=arr[i]; ++i; } ++index; } while(i<=mid) { copy[index]=arr[i]; ++i; ++index; } while(j<=end) { copy[index]=arr[j]; ++j; ++index; } for(int i=start;i<=end;++i) arr[i]=copy[i]; return right+left+count; } int InversePairs(int *arr,int len) { if(!arr||len<=0) return 0; int *copy=new int[len]; for(int i=0;i<len;++i) copy[i]=arr[i]; int count=InversePairsCore(arr,0,len-1,copy); delete []copy; return count; } int main() { int n; while(cin>>n) { int *arr=new int ; for(int i=0;i<n;++i) cin>>arr[i]; cout<<InversePairs(arr,n)<<endl; delete[]arr; } return 0; }
相关文章推荐
- 深入浅出JMS(一)--JMS基本概念
- 栈和队列常考面试题(一)
- pickle序列化
- 太太万岁
- HTML5语义标签的实践
- 简单排序(冒泡、选择、插入)总结
- 112. Path Sum
- bzoj 2456: mode(找众数)
- vagrant 环境配置以及常用命令
- 解决MySQL ERROR 1130 (HY000): Host 'XXXX' is not allowed to connect to this MySQL server
- 媒体查询-手机尺寸参考
- 爬虫, 从python2 到 python3
- 如何划分man文档的章节
- python脚本退出后 不应该为负值
- ImageLoader 介绍
- mac中配置hadoop常见问题
- python脚本退出后 不应该为负值
- P1896 [SCOI2005]互不侵犯King
- javascript checkbox作为开关,控制全选和全不选的动态关联实现
- Android菜单选项