给定N个整数,是编写一个算法将其分为两部分,其中一部分是整数,另一部分是负数。要求时间复杂度为O(n)

在线等~~~~~~~~~快!
用C语言写。。。。。。。。。。。。。。

直接搜索一遍N个整数就可以了啊,整数(正数?)加入第一部分,负数加入第二部分,(零不要,如果你说的“其中一部分是整数”是指整数的话。复杂度就是O(n)。
整数数组integer[N],正数部分positive[N],负数部分negtive[N]
for i=1 to N
if integer[i]>0
add integer[i] to positive[N]
else if integer[i]<0
add integer[i] to negtive[N]
else do nothing
end if
end ifend for
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-01-13
首先声明我是学C++的,这题似乎是一道考研题目。时间复杂度为O(n),空间复杂度O(1),下面是代码(假设数组A中存放了n个数,试编写算法,将A中所有负数放到所有正数的前边),希望对你有所帮助。
void Rearrange(int a[], int n)
{
int i, j, k;
i=0, j=n-1; // i,j初始指向a的第1个和第n个元素。
k=a[0]; //暂存枢轴元素。
while(i<j)
{
while(i<j && a[j]>0) j--; //从右向左找负数。
if (i<j) a[i++]=a[j]; //将负数前移。
while(i<j && a[i]<0) i++; //从左向右找正数。
if (i<j) a[j--]=a[i]; //将正数后移。
}
a[i]=k; //将原第一元素放到最终位置。
}
相似回答