题目:
给定一个整数数组a[n],若i<j,a[i]>a[j],则<a[i],a[j]>称为一个逆序对。例如:数组(3,
1,4,5,2)的逆序对有<3,1>,<3,2>,<4,2>,<5,2>,其逆序对的个数称为逆序数,如数组
(3,1,4,5,2)的逆序数为4。请用分治法设计一个程序解决之并分析其时间复杂度。
解题思路:
首先利用递归操作将数组不断划分,直到为1个元素,然后按照从小到大的顺序进行排序。类比归并排序的思路,把中点mid左边的数组a[i]和右边的数组q[j]进行比较,把小的元素放到一个新数组temp[]中。这样就能保证i左边的元素都是小于j的,然后i右边的元素都是大于j的,所以对于a[j]来说,满足的元素有(mid-i+1)个。
代码:
//任务三:求解逆序数问题
//给定一个整数数组a[n],若i<j,a[i]>a[j],则<a[i],a[j]>称为一个逆序对。例如:数组&