并归排序+P1136求逆序对个数
并归排序
介绍
说道并归排序,其实运用到了递归,首先将一个很大很大的数分割为两个两个的,然后让这两个数进行比较排序,比较之后返回上一级,然后4个4个比较,首先举个例子:
举例讲解
初始数据:4 3 5 9 6 2 8 1
分割:4 3 5 9 6 2 8 1
比较:3 4 5 9 2 6 1 8
合并:(1):3 4 5 9
首先3和5比较 3进队:3
(2): 4 5 9
然后5和4比较 4进队:3 4
(3): 5 9
然后5进队 3 4 5
(4): 9
最后9进队 3 4 5 9
相同的方法合并2 6 1 8
然后把两个有序数列再次排序:
3 4 5 9 1 2 6 8
1和3比较 1进队:1
2和3比较 2进队:1 2
6和3比较 3进队:1 2 3
6和4比较 4进队:1 2 3 4
……
最后9进队:1 2 3 4 5 6 8 9
这里特别说明一下:我们在比较的时候,给两个有序数列分别记录下来比到哪里了,不如我们可以用a=1,b=1分别表示两个有序数列分别记录下来比较到了哪个数。
举个例子
3 4 5 9 1 2 6 8
1和3比较 1进队:1
那么现在因为第二个数列的一个数进队,那么下一次就该第二个去比较,所以b++即b=2;a不变为1;
2和3比较 2进队:1 2
现在因为是第二个数列又有一个数进队,所以下次要拿下一个数去比较
,则b++,a不变;
如果第一个数列有数进队的话,a是需要++的;
这就是抽风的并归排序!
代码
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xorex!
评论