一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
2017-01-15 11:48
1146 查看
#include <iostream> using namespace std; void txsort(int* arr, int len) { if (!arr || len == 1) { return; } int negCount = 0; for (int i = 0; i < len; ++i) { if (arr[i] < 0) { negCount++; } } int swapingId = 0; int fixNegId = 0; int toSwapId = 0; for (int i = 0; i < len; ++i) { swapingId = (i - fixNegId) % (negCount - fixNegId) + fixNegId; toSwapId = i + negCount - fixNegId; /*arr[swapingId] < 0说明此处的负数未固定, * 将带交换元素下标定位至待固定元素下标 */ if (arr[swapingId] < 0) { toSwapId = fixNegId; fixNegId++; } swap(arr[swapingId], arr[toSwapId]); if (fixNegId == negCount) { break; } } }
相关文章推荐
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- 某数组里存在乱序的正负数字,要求将负数放到左边,正数放到右边,并且正负数的相对位置不改变
- 不改变正负数之间相对顺序重新排列数组(时间O(N),空间O(1))
- 不改变正负数之间相对顺序重新排列数组(时间O(N),空间O(1))(桶排序)
- 算法,不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1)
- 不改变正负数之间相对顺序重新排列数组
- [算法学习]不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1)
- 不改变正负数相对顺序,重排数组,使负数在正数之前
- 第二十七章:不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1)
- 不改变正负数之间相对顺序重新排列数组
- 第二十七章:不改变正负数之间相对顺序重新排列数组
- [算法学习]不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1)
- 12.输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。
- 不改变正负数之间相对顺序重新排列数组.时间O(N),空间O(1)
- 一个整形数组,数组里有正数也有负数。 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和,求所有子数组的和的最大值,要求时间复杂度为O(n)。
- 数组排序后保证正数之间和负数之间的相对位置不变 负数在前 正数在后
- 不改变正负数相对顺序重新排列数组
- 程序员编程艺术第二十七章:不改变正负数相对顺序重新排列数组(无解?)