我看到了一道面试题,要求交换数组arr[i]和i的值,其中i的范围是[0,n-1]。
例子:
输入:1 2 4 5 3 0
答案:5 0 1 4 2 3
解释:输入中a[1]=2,因此答案中a[2]=1,以此类推
我尝试了一下,但没有得到正确的答案。
我的思路是:对于每一对数字p和q,a[p]=q且a[q]=p。
欢迎提出任何改进思路。
FOR(j,0,n-1)
{
i=j;
do{
temp=a[i];
next=a[temp];
a[temp]=i;
i=next;
}while(i>j);
}
print_array(a,i,n);
如果您能提供带有部分解释的伪代码,那么我更容易理解您的答案。
编辑:我了解了这是循环置换,因此更改了问题标题。