分治法求解逆序数问题

题目:


        给定一个整数数组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]>称为一个逆序对。例如:数组&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值