【正确答案】[解答] (1)算法的基本设计思想如[分析]所述。
(2)用C语言算法描述如下:
void Adjust(int A[]){ //调整数组A,使得A的左边为负整数,右边为整数
int i=1,j=n,temp;
while(i<j){
while(A[i]<0 && i<j)i++; //A[i]为负整数时,i增1
while(A[i]<0 && i<j)i--; //A[i]为正整数时,i减1
if(i<j){
temp=A[i];A[i]=A[j];A[i]=temp; //A[j]为正整数、A[j]为负整数时,交换
i++;
j--;
}
}
}
(3)算法的时间复杂度为O(n);算法的空间复杂度为O(1)。
【答案解析】[解析] 本题主要考查线性表的顺序存储结构(这里为数组)的应用。算法的基本设计思想是先设置好上、下界和轴值,然后分别从数组前端查找正整数和从数组末端查找负整数,找到后进行交换,直到上、下界相遇。
具体做法是:设置两个指示器i和j,其中i=1,j=n;当A[i]为正整数,A[j]为负整数时,A[i]和A[j]交换;否则,A[i]为负整数时,则i++;A[j]为正整数时,则j--。这样,可使算法的时间复杂度为O(n)。