假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在在正数的左边,且保证负数和正数间元素相对位置不变。时空复杂度要求分别为o(n), o(1).
//算法分开正负数
void insertSort(int*A ,int size)
{
int minus=-1,plus=-1;
int tmp=0;
for(int i=0;i<size;i++)
{
if(minus==-1)// means start sorting or has done one sorting.
{
if(A[i]<0&& plus>=0)// means plus number has been found and finds another minus number.
{
minus=i;
}
if(A[i]>0&& plus<0)// means find first plus number.
{
plus=i;
}
}
if(minus>=0&& plus>=0) // replace [plus, ..., minus] to [minus, plus, ...]
{
tmp=A[plus];
A[plus++] = A[minus];
for (int k = minus; k> plus; k--)
{
A[k] = A[k -1];
}
A[plus]=tmp;
minus=-1;
}
}
}
Note:
1 plus is increased 1 each time a plus number is found.