贪心思路:每次将第(i)个位置上的数,与数字(i)所处的位置进行交换。重复这个操作,每次至少会将一个数字通过交换至归位,直到序列变为有序。
const int N=1e5+10;
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[i],a[a[i]]),res++;
cout<<res<<endl;
//system("pause");
return 0;
}