您的位置:首页 > 其它

PAT 1067 Sort with Swap(0,*)

2014-11-20 00:19 375 查看
#include <cstdio>
#include <cstdlib>
#include <vector>

using namespace std;

int swap(vector<int> &numpos, int va, int vb) {
//printf("swap(%d at %d, %d at %d)\n", va, numpos[va], vb, numpos[vb]);
int pa = numpos[va];
int pb = numpos[vb];
numpos[va] = pb;
numpos[vb] = pa;
}

int pick_first_mismatch_value(vector<int> &numpos, int start) {
int i = start;
int len = numpos.size();
while (i < len) {
if (numpos[i] != i) {
return i;

}
i++;
}
return -1;
}

int main() {
int N;
scanf("%d", &N);

vector<int> numpos(N);

int value;
for (int i=0; i<N; i++) {
scanf("%d", &value);
numpos[value] = i;
}

int step = 0;
int b = 0;
for (;;) {
if (numpos[0] == 0) {
b = pick_first_mismatch_value(numpos, b);
if (b <= 0) {
break;
}
swap(numpos, 0, b);
step++;
continue;
}
swap(numpos, 0, numpos[0]);

step++;
}

printf("%d", step);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: