负数在前正数在后且顺序不变
2014-09-10 11:06
148 查看
简单说下题意: 给一个整形数组,如:1, 7, -5, 9, -12, 15,处理后使得负数在前正数在后,且负数相对顺序不变,正数亦然。即最终得到:-5, -12, 1, 7, 9, 15
写了个自己认为是O(N)复杂度的代码,贴下边,如有错误,欢迎拍砖。
写了个自己认为是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, 15 1, 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; }
相关文章推荐
- 数组排序后保证正数之间和负数之间的相对位置不变 负数在前 正数在后
- 插入排序的一个应用-调整负数在前,正数在后,原来相对位置不变
- 调整数组顺序,使得奇数在前偶数在后,分别保证奇数和偶数之间的相对位置不变
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- 【杭电-oj】-2020-绝对值排序(冒泡排序注意第二个for ,负数变正数但原变量值不变可先平方)
- 将数组中负数调到正数之前,但相对位置不变
- 在顺序存储模式下将所有的负数放到正数前面的三种算法
- 【大家来一起讨论吧】百度面试题,假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求:o(n),o(1)
- 排序使得数组负数在正数左边且按照原来的顺序
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 使负数在正数之前,不改变原来的顺序
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 把数组中负数放在前面,0放中间,正数放后面,并保持相对顺序
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 不改变相对顺序,负数左边正数右边
- 将数组里的负数排在数组的前面,正数排在数组的后面。但不改变原先负数和正数的排列顺序。
- 调整数组 使得数组中负数排在前面正数排在后面,并且正数和负数的相对位置不变 (递归思路)
- 数组:奇数在前,偶数在后,要求顺序不变
- 百度笔试题:负数在前 正数在后(奇数在前,偶数在后)
- 不改变正负数相对顺序,重排数组,使负数在正数之前