求一个数组的逆序数的总数

#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;
}
发布了98 篇原创文章 · 获赞 1 · 访问量 4482

猜你喜欢

转载自blog.csdn.net/weixin_40823740/article/details/103569233