算法与数据结构实验6: 逆序对

这篇博客探讨了如何计算一个序列的逆序对数量,并通过两种方法解决排序问题。第一种方法通过构建逆序序列并进行交换,第二种方法使用归并排序。博主提供了示例和代码解释,强调了这两种方法的时间复杂度问题。

欢迎访问https://blog.csdn.net/lxt_Lucia~~

宇宙第一小仙女\(^o^)/~~萌量爆表求带飞=≡Σ((( つ^o^)つ~ dalao们点个关注呗~~

 

问题:

 

Description

在这个问题中,你需要分析一个对n个不同数排序的算法。该算法主要通过交换相邻数直到序列有序(升序)。比如:对输入序列

 "  9 1 0 5 4 ",经过一系列交换后变成有序序列 " 0 1 4 5 9 ",你的任务是计算将序列变成有序最少需要经过多少次交换。

 

Input

输入包含多组测试数据。每组第一个是整数n<500,000,表示输入序列的长度,接下来是n行,每行有一个整数 a [ i ] ( 0 ≤ a [ i ] ≤ 999,999,999)。当n=0时表示结束。

 

Output

对每一组输入,输出该序列变成有序所需要交换的最少的次数。

 

Sample Input

5
9
1
0
5
4
3
1
2
3
0

Sample Output

6
0

 

解决方法

 

方法1:

思路:

1)根据待排序列,写出其逆序列。

2)根据逆序列中的每一项所代表的数j和逆序个数aj,将待排序列中对应的数j向左邻交换aj次。

3)交换完成后,序列就排序完成。此时,交换的次数就是最少的次数,也是原序列的逆序数。

举个栗

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值