求一个c++的代码~
题目:给定一个数列,给它从小到大排列,每次交换两个数,求最少的交换次数~
思路:找出形成单循环的个数。(单循环:一些数原来不在排序后自己的位置,却占据排序后那些数共占据的位置,如3412排序后是1234,其中24原来不在排序后自己的位置,但却占了排序后的24应该占得位置。(语文不好解释不大清楚-.-))。然后把原本数列不对应的数的个数减去单循环的个数就是最少交换次数。
不知道我思路对不对==不对的话求大神帮忙解释一下。顺便上一下代码,怎么找出单循环的个数-.-。