一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。
比如: input: 1,7,-5,9,-12,15 ,ans: -5,-12,1,7,9,15 。且要求时间复杂度O(N),空间O(1) 。
没有什么很好的方法
#include <iostream>
#include <algorithm>
#include <functional>
using namespace std;
void sort(int* arr, int length)
{
if(length < 1 || NULL == arr)
{
return;
}
int* p = arr;
int* q = arr;
int* pos = q;
while(p <= arr + length - 1)
{
if(*p < 0)
{
swap(*p,*q);
pos = q;
while(pos < p)
{
++pos;
swap(*p,*pos);
}
++q;
}
++p;
}
}
int main()
{
int arr[]={1,-1,3,4,-3,2,-5,9,-1,8};
sort(arr,10);
for_each(arr,arr+10,[](int i){cout<<i<<endl;});
}