#include<iostream>
using namespace std;
int n, a[100], b[100], tot = 0;
void merge_sort(int l, int r)
{
if(l >= r) return;
int mid = (l + r) / 2;
merge_sort(l, mid);
merge_sort(mid + 1, r);
int i = l, j = mid + 1, k = 0;
while(i <= mid && j <= r) {
if(a[i] <= a[j]) {
b[k++] = a[i++];
} else {
tot += mid - i + 1;
b[k++] = a[j++];
}
}
while(i <= mid) b[k++] = a[i++];
while(j <= r) b[k++] = a[j++];
for(int t = 0; t < k; t++) a[l + t] = b[t];
}
int main()
{
cin >> n;
for(int i = 1; i <= n; ++i)
cin >> a[i];
merge_sort(1, n);
for(int i = 1; i <= n; ++i)
cout << a[i] <<" \n"[i==n];
cout << tot << endl;
return 0;
}
归并排序求逆序对
最新推荐文章于 2024-07-19 15:45:46 发布