现要对n个实数(仅包含正实数和负实数)组成的数组A进行重新排列,使得其中所有的负实数都位于正实数之前。求解该问题的算法的伪代码如下所示,则该算法的时间和空间更杂度分别为( )。
i=0;j=n-1;
while i<j do
while A[i]<0 do
i=i+1;
while A[j]>0 do
j=j-1;
if i<j do
交换A[i]和A[j];
问题1选项

- A.见图A
- B.见图B
- C.见图C
- D.见图D
正确答案及解析
正确答案
C
解析
根据程序不难看出,要将负实数位于正实数之前,其实就是对所有元素进行了一次遍历,正实数和负实数互换位置即可,因此其时间复杂度为O(n),由于元素A[i]和A[j]互换时,需要一个临时存储空间来存放元素,因此其空间复杂度为O(1)。





