数组反序对的个数
来源:互联网 发布:赛尔网络个人业务登录 编辑:程序博客网 时间:2024/06/15 18:59
即:数组a[]; 对于i < j 且 a[i] > a[j],则称这是一个反序。
给定一个数组,要求写一个函数,计算出这个数组里所有反序的个数。
采用归并排序可以实现,时间复杂度为O(nlgn)源码如下:
void findRovatePair(int a[],int length,int *temp);
void merge(int a[],int low,int mid,int high,int *temp);
void mergeSort(int a[],int low,int high,int *temp);
void merge(int a[],int low,int mid,int high,int *temp)
{
int l=low,m=mid+1,k=0;
while(l<=mid && m<=high )
{
if(a[l]>a[m])
{
temp[k++]=a[m++];
pairs=pairs+mid-l+1;//在归并排序中增加了这个语句,记录反序对数
}
else
{
temp[k++]=a[l++];
}
}
while(l<=mid)
{
temp[k++]=a[l++];
}
while(m<=high)
{
temp[k++]=a[m++];
}
for(l=0;l<k;l++)
{
a[low+l]=temp[l];
}
}
void mergeSort(int a[],int low,int high,int *temp)
{
if(low<high)
{
int mid=(low +high)/2;
mergeSort(a,low,mid,temp);
mergeSort(a,mid+1,high,temp);
merge(a,low,mid,high,temp);
}
}
void findRovatePair(int a[],int n,int *temp)
{
mergeSort(a,0,n-1,temp);
cout<<"pairs:"<<pairs<<endl;
}
- 数组反序对的个数
- 数组反序个数算法
- 找出反序的个数
- 求数组中逆序对的个数
- 求数组的逆序对个数
- 求数组中逆序对的个数
- 创新工厂笔试题------数组反序个数
- 数组的反序
- 找出数组中符合条件的数对的个数
- 求数组逆序对个数
- 数组解逆序对个数
- 排序:查找数组中逆序对的个数
- 求数组的逆序对个数【先离散化】
- 树状数组的简单应用(求逆序对个数)
- 剑指OFFER_求数组中逆序对的个数
- 利用树状数组(对数组左侧比数组小的点的个数进行维护)
- C#字符串单词个数某个字符的个数反序大写
- 逆序对的个数
- 【批评的入口是激励,是员工成长】
- 关系代数的七个扩充操作-及其深刻内涵
- 【3岁前一定要改掉的毛病】
- UVa:116 Unidirectional TSP
- LINUX移植——内核移植(一)
- 数组反序对的个数
- SilkTest天龙八部系列5-类的属性
- SilkTest天龙八部系列6-用open agent进行测试
- (step7.2.4)hdu 2674(N!Again——简单数论)
- SilkTest天龙八部系列7-动态对象识别
- hdu 1031 Design T-Shirt
- 自醒-【德鲁克的经典五问】
- qq邮箱是怎么做到同一个浏览器让多个不用用户同时打开的? --session的控制
- 【6种有效的沟通方法】