/*
题目:
求给定数组的逆序对数。
*/
/*
思路:
归并排序。
*/ #include<iostream>
#include<cstring>
#include<vector>
#include<algorithm>
#include<map> using namespace std; int merge(int A[], int left,int mid,int right){
int myCount = 0;
int p1 = left;
int p2 = mid + 1;
int temp[right-left+1];
int i = 0;
while(p1 <= mid && p2 <= right){
if(A[p1] > A[p2]){
myCount = myCount + 1 + mid - p1;//右边数字大于左边数字的个数。
temp[i] = A[p2];
p2++;
}else{
temp[i] = A[p1];
p1++;
}
i++; }
while(p1 <= mid){
temp[i++] = A[p1++];
}
while(p2 <= right){
temp[i++] = A[p2++];
}
for(int i = left; i <= right; i++){
A[i] = temp[i-left];
}
return myCount;
}
int sort(int A[], int left,int right) {
if(left == right){
return 0;
}
int mid = left + ((right-left) / 2);
//cout<<left<<" "<<mid<<" "<<right<<endl;
int num1 = sort(A,left,mid);
int num2 = sort(A,mid+1,right);
return merge(A,left,mid,right) + num1 + num2;
} int main(){
int a[] = {1,3,7,2,4,1};
cout<<sort(a,0,5)<<endl;
for(int i = 0; i < 6;i++){
cout<<a[i]<<" ";
}
return 0;
}

  

最新文章

  1. node+fis3搭建
  2. java抽象类实践
  3. android 常见面试题以及答案
  4. ch2 创建和销毁对象
  5. [Effective JavaScript 笔记]第59条:避免过度的强制转换
  6. Linux命令 — 设置或查看网络配置命令ifconfig
  7. reflact中GetMethod方法的使用
  8. 《30天自制操作系统》读书笔记(5) GDT&amp;IDT
  9. Windows I/O模型之一:Select模型
  10. C语言深度剖析--volatile(转载)
  11. MongoDB获得短暂的
  12. A在SP.NET跨页多选
  13. C#扩充类
  14. C语言 extern学习2 分析
  15. DOM解析,取得XML文件里面的信息
  16. HDU2222 自动机(学习中)
  17. 【吃炸弹的鸽子UVA10765-双联通模板】
  18. ad network
  19. Atitit mybatis快速开发 的sql api接口
  20. 基于jquery ajax的多文件上传进度条

热门文章

  1. SQL Server 常用的数据类型
  2. JDBC——CreateStatement和PrepareStatement作用区别
  3. 如何更改Jframe里Jpanel的大小
  4. Flink安装及实例教程
  5. 《Android Studio实战 快速、高效地构建Android应用》--五、备忘录实验(1/2)
  6. ubuntu16.04(其他版本也可)批量修改图片名---shell编程
  7. python学习记录(二)
  8. Zookeeper 部署 配置文件
  9. Nginx 十大优化 与 防盗链
  10. 一键安装php5.6.40脚本(LAMP环境)