#include <cstdio>
#include <cstdlib>
#include <iostream>
#include <algorithm>
using namespace std;
int a[100005];
int pos[100005];//每个数字的位置
int main()
{
// freopen("in.txt","r",stdin);
int N;
scanf("%d",&N);
int cou=0;//交换次数
int m=0;//到位个数
for(int i=0;i<N;i++)
{
int t;
scanf("%d",&t);
a[i]=t;
pos[t]=i;
if(a[i]==i && a[i]!=0)
m++;
}
int p=1;
while(m!=N-1)
{
if(pos[0]!=0)
{
int pos1=pos[0];//0的位置
int pos2=pos[pos[0]];//另一个元素的位置
int t=a[pos2];//另一个元素
swap(a[pos1],a[pos2]);
pos[0]=pos2;
pos[t]=pos1;
m++;//到位+1
cou++;
}
else
{
while(a[p]==p && p<N)
p++;
int t=a[p];//另一个元素
swap(a[pos[0]],a[p]);
pos[0]=p;
pos[t]=0;
cou++;
}
}
printf("%d",cou);
return 0;
}
1067. Sort with Swap(0,*) (25)
最新推荐文章于 2020-02-25 21:17:30 发布
