我想找一个数组的最小交换次数来排序。(保证数组没有重复。)我找到了一个帖子,基本上是用一个图来实现的。计算为一个序列排序的最小交换次数。
但我想知道是否也可以通过运行选择排序并计算交换次数来实现。(见下面的代码。)这种方法正确吗?还是有一种情况下,它会给出错误的结果?
int minSwaps(int[] A, int n) {
int numSwaps = 0;
for (int i = 0; i < n - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < n; j++) {
if (A[j] < A[minIndex])
minIndex = j;
}
if (minIndex != i) {
numSwaps++;
int temp = A[minIndex];
A[minIndex] = A[i];
A[i] = temp;
}
}
return numSwaps;
}