负数在前正数在后且顺序不变

来源:互联网 发布:java程序设计教程视频 编辑:程序博客网 时间:2024/06/10 06:27

简单说下题意: 给一个整形数组,如:1, 7, -5, 9, -12, 15,处理后使得负数在前正数在后,且负数相对顺序不变,正数亦然。即最终得到:-5, -12, 1, 7, 9, 15

写了个自己认为是O(N)复杂度的代码,贴下边,如有错误,欢迎拍砖。

#include <iostream>using namespace std;void swap(int &x, int &y){int t = x;x = y;y = t;}int a[] = {//1, 7, -5, 9, -12, 151, 6, 7, -5, 12, 9, -15};int len;int main(void){len = sizeof(a) / sizeof(*a);int *i = a, *e = a + len -1;int *j = i;while(j < e){while(*i < 0 && i < e){i++;j++;}while(*j >= 0 && j < e)j++;if(j <= e){swap(*i++, *j);int *k = i;while(k < j && *k >= 0 && *j >= 0)swap(*k++, *j);}}for(int i = 0; i < len; ++i)cout << a[i] << " ";cout << endl;return 0;}


0 0
原创粉丝点击