您的位置:首页 > 其它

第二十七章:不改变正负数之间相对顺序重新排列数组

2014-02-11 11:47 267 查看
一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。

比如: 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;});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐