#include<iostream>
#include<vector>
using namespace std;
int cnt = 0;
void merge(int a[], int l, int mid, int r)
{
int num = r - l + 1,i,j,k=0;
int *b = new int[num];
i = l;
j = mid + 1;
while (i <= mid && j <= r)
{
if (a[i] < a[j])
{
b[k++] = a[i];
i++;
}
else if(a[i]>a[j])
{
b[k++] = a[j];
cnt += (mid - i + 1);
cout << cnt << endl;
j++;
}
else
{
b[k++] = a[i++];
b[k++] = a[j++];
}
}
while (i <= mid)
b[k++] = a[i++];
while (j <= r)
b[k++] = a[j++];
for (int p = 0; p < k; p++)
a[l++] = b[p];
}
void num(int a[],int l,int r)
{
if (l<r)
{
int mid = (l + r) / 2;
num(a, l, mid);
num(a,mid + 1, r);
merge(a, l, mid, r);
}
}
int main()
{
int a[4] = {7,5,6,4};
num(a, 0, 3);
cout << cnt << endl;
system("pause");
return 0;
}
求一个数组的逆序数的总数
猜你喜欢
转载自blog.csdn.net/weixin_40823740/article/details/103569233
今日推荐
周排行