A-A+
设A[1…100]是一个记录构成的数组 B[1…100)]是一个整数数组 其值介于1至100
问题详情
设A[1…100]是一个记录构成的数组,B[1…100)]是一个整数数组,其值介于1至100之间,现要求按B[1…100]的内容调整A中记录的次序,比如当B[1]=11时,则要求将A[1]的内容调整到A[11]中去。规定可使用的附加空间为O(1)。
请帮忙给出正确答案和分析,谢谢!
参考答案
正确答案:void ChangeElement(ElemTypeA[]int B[]int n){ /*按数组B中的值调整数组A中的内容*/i=1;while(i<n){ if(B[i]!=i){ j=i;while(B[j]l=i){ k=B[j];B[j]=B[k];B[k]=k;t=A[j];A[j]=A[k];A[k]=t;}}i++:}}
由题目可知,由于辅助空间为O(1),要想使数组A中的内容调整成符合题目要求的内容,可按数组B中的值调整数组A中的内容。若B[i]=i,则A[i]中的内容保持不变;若B[i]=k,则将A[i]与A[k]的内容交换,并调整B[i]的值,直至B[i]=i为止。算法描述如下。