算法思路
最终的序列是第i个位置上应该放第i个数
那麽从前往后遍历,只要数字不再自己的位置上,就进行交换。
代码
#include<iostream>
using namespace std;
const int N = 10010;
int a[N];
int n;
int main()
{
cin>>n;
for(int i=1;i<=n;++i)cin>>a[i];
int res = 0;
for(int i=1;i<=n;++i)
while(a[i]!=i)swap(a[a[i]],a[i]),res++;
cout<<res<<endl;
return 0;
}
while(st[i]!=i)为什么这的while不可以换成if呢