作者:云梦泽
日期:20131110
题目:给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。 例如: 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。 原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。给出函数头部: C/C++ int run(const int *a,int n); (特别指出:1 3 5 6 2 7 4变为有序序列交换次数为4)
看过一些网上别人写的程序,但有些有很大问题,比如对红色标记的这个序列结果可能给出的是5,其实只需4次交换便可,所以不严谨,虽然有些序列能得到正确结果。
我的思路:假设位置 1 2 3 4 5 6 7 (实际上位置索引从0开始,为方便理清思路&#x