您的位置:首页 > 其它

数组中的逆序对

2016-09-17 14:25 309 查看
求数组中的逆序对实际上有两种方法第一种直接暴力解决,两次循环,搞定,但是时间复杂度较高o(n^2),

另一种方法就是利用归并排序的方法,时间复杂度也就是归并排序的时间复杂度是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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: