在这段代码中,当我在while循环中用j + 1替换i + 1时,它会产生分段错误。
两个变量都相同。

此代码段用于查找对由升序连续的整数组成的无序数组进行排序所需的最小交换次数。

int minimumSwaps(int n, int* a) {
int i=0,j=0,temp=0,swap=0;
for(i=0;i<n-1;i++)
{
    if(i+1!=a[i])
    {
        j=i;
        while(a[j]!=i+1)
        {
            j++;
        }
        temp=a[i];
        a[i]=a[j];
        a[j]=temp;
        swap++;
    }
    else
    {
        continue;
    }

}
return swap;
}

最佳答案

您可以在两个位置用i+1替换j+1。如果您指的是第二个位置,

while(a[j]!=i+1)
{
  j++;
}



while循环上的条件将不断变为更高的值(每次迭代j+1变为更高的值,并且a[j]引用不同的值,因此,直到您尝试访问。

09-05 00:06
查看更多