假設一整型數組存在若干正數和負數,現在通過某種算法使得該數組的所有負數在在正數的左邊,且保證負數和正數間元素相對位置不變。時空複雜度要求分別爲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.