题目链接
代码实现
//核心思想是每一次交换都要至少正确归位一个
#include <stdio.h>
#include <stdlib.h>
//判断是否已经数组当前是否已经有序
int yessort(int* arr,int n) {
for (int i = 0; i < n; i++) {
if (arr[i] != i + 1) {
return 0;
}
}
return 1;
}
int main()
{
int n;
scanf("%d", &n);
int* arr = (int*)malloc(n * sizeof(int));
for (int i = 0; i < n; i++) {
scanf("%d", arr + i);
}
int count = 0;
//在没有交换一次之前判断一次数组是不是已经有序
if (yessort(arr, n)) {
printf("%d", count);
free(arr);
return 0;
}
for (int i = 0; i < n; i++) {
//判断当前位置序号不对应
if (arr[i] != i + 1)