AcWing 1553. 用 Swap(0, i) 操作进行排序---表排序
原题链接
中等
作者:
巨鹿噜噜噜路
,
2020-06-02 23:00:45
,
所有人可见
,
阅读 1116
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
const int MAX_N = 100010;
int arr[MAX_N];
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
int sum = 0;
for (int i = 0; i < n; i++) {
int cnt = 0;
//交换到正确位置为止
while (arr[i] != i) {
swap(arr[i], arr[arr[i]]);
cnt++;
}
if (cnt > 0) {
//如果不在0位置交换,需要借助0多交换2次
if (i) cnt += 2;
sum += cnt;
}
}
printf("%d\n", sum);
return 0;
}
//如果不在0位置交换,需要借助0多交换2次
这句话是啥意思鸭?题目不是说要将值为 0 和其他数值交换吗?为什么是0位置呢?