第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; //将原第一元素放到最终位置。
}