设向量A[0,…n-1]中存有n个互不相同的整数,每个关键字的值均在0~n-1,试写一算法将向量A排序,结果输入到另一个向量B[0,…,n-1]中

答案中设计思路是:
A[]数组地址范围为0~(n-1),数值范围也是0~(n-1)。且数值各不相同,由此可知,对每个关键字来说,关键字值本身即指出了这个关键字在数组中的位置。因此,只需根据关键字值将其存入数组B[]中合适的位置即可。

问题1:不懂怎么看出“关键字值本身即指出了这个关键字在数组中的位置”,并且相面算法描述也没有对向量A[]进行排序

答案算法描述是:
void Sort(int A[],int B[],int n)
{
int i;
for(i=0;i<n;++i)
B[A[i]]=A[i];
}

问题2:该算法空间复杂度为什么是O[n],答案是因为用到了一个与原序列长度相同的辅助数组,怎么看出来有辅助数组

问题1答:没有对A数组本身进行排序,排序的结果是在B数组中。
“关键字值本身即指出了这个关键字在数组中的位置”意思是就比如a数组是 {2,0,1} 第一个值2应该在b数组下标2的位置。第二个值0应该在b数组下标0的位置。第三个值1应该在b数组下标1的位置。
循环B[A[i]]=A[i]; 就是执行B[2]=2;B[0]=0;B[1]=1;
这样对B下标从0循环到2的循环结果是 {0,1,2}这不已经排序好了。
问题2答:B就是辅助数组啊,B数组所用长度与A数组长度相同,空间复杂度就是O(n)

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img