#include<iostream>
#include<vector>
using namespace std;
bool isSort(vector<int> v) {
for (int i = 0; i < v.size() - 1; i++) {
if (v[i] < v[i + 1])continue;
else return false;
}
return true;
}
int main()
{
int N, zero;//zero记录0的下标
cin >> N;
vector<int> v(N),D(N);
for (int i = 0; i < N; i++) {
cin >> v[i];
D[v[i]]=i;
if (v[i] == 0)zero = i;
}
int min = 0;
int j = 1;
while (!isSort(v)) {
int i;
if (zero== 0) {//此时v还不是有序序列,但是0的下标为0,所以找下一个最小的没有对号入座的
while (v[j] == j)
j++;
i = D[j];
}
else
i = D[zero];
swap(v[zero], v[i]);//交换0和i位置
swap(D[v[zero]], D[v[i]]);//交换0和i的下标位置
zero = i;
min++;
}
printf("%d", min);
return 0;
}
题目地址