本文主要是介绍第二十七章:不改变正负数之间相对顺序重新排列数组,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。
比如: 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;});
}
这篇关于第二十七章:不改变正负数之间相对顺序重新排列数组的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!