单选题
现要对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];
A、
Θ(n)和Θ(n)
B、
Θ(1)和Θ(n)
C、
Θ(n)和Θ(1)
D、
Θ(1)和Θ(1)
【正确答案】
C
【答案解析】
根据程序不难看出,要将负实数位于正实数之前,其实就是对所有元素进行了一次遍历,正实数和负实数互换位置即可,因此其时间复杂度为O(n),由于元素A[i]和A[j]互换时,需要一个临时存储空间来存放元素,因此其空间复杂度为O(1)。
提交答案
关闭