排序01

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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章