剑指offer-面试题51-数组中的逆序对-归并排序
2024-09-27 06:48:54
/*
题目:
求给定数组的逆序对数。
*/
/*
思路:
归并排序。
*/ #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;
}
最新文章
- node+fis3搭建
- java抽象类实践
- android 常见面试题以及答案
- ch2 创建和销毁对象
- [Effective JavaScript 笔记]第59条:避免过度的强制转换
- Linux命令 — 设置或查看网络配置命令ifconfig
- reflact中GetMethod方法的使用
- 《30天自制操作系统》读书笔记(5) GDT&;IDT
- Windows I/O模型之一:Select模型
- C语言深度剖析--volatile(转载)
- MongoDB获得短暂的
- A在SP.NET跨页多选
- C#扩充类
- C语言 extern学习2 分析
- DOM解析,取得XML文件里面的信息
- HDU2222 自动机(学习中)
- 【吃炸弹的鸽子UVA10765-双联通模板】
- ad network
- Atitit mybatis快速开发 的sql api接口
- 基于jquery ajax的多文件上传进度条
热门文章
- SQL Server 常用的数据类型
- JDBC——CreateStatement和PrepareStatement作用区别
- 如何更改Jframe里Jpanel的大小
- Flink安装及实例教程
- 《Android Studio实战 快速、高效地构建Android应用》--五、备忘录实验(1/2)
- ubuntu16.04(其他版本也可)批量修改图片名---shell编程
- python学习记录(二)
- Zookeeper 部署 配置文件
- Nginx 十大优化 与 防盗链
- 一键安装php5.6.40脚本(LAMP环境)