编写一个C++代码包含主函数,使得在O(n)的时间内重排数组,将所有取负值的排序码排在所有取正值的排序码之前
时间: 2024-03-18 16:41:52 浏览: 72
以下是一个简单的C++代码,实现了将所有取负值的排序码排在所有取正值的排序码之前:
```c++
#include <iostream>
#include <vector>
using namespace std;
void rearrange(vector<int>& nums) {
int left = 0, right = nums.size() - 1;
while (left <= right) {
if (nums[left] < 0) {
left++;
} else if (nums[right] >= 0) {
right--;
} else {
swap(nums[left], nums[right]);
left++;
right--;
}
}
}
int main() {
vector<int> nums = {1, -2, 3, -4, 5, -6};
rearrange(nums);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
主函数中定义了一个vector类型的数组nums,使用rearrange函数对其进行重排。rearrange函数中使用双指针的方法,将所有取负值的元素与取正值的元素交换位置,最终将所有取负值的元素排在了所有取正值的元素之前。输出结果为:-2 -4 -6 1 3 5。
注意,这个算法只能将所有取负值的元素排在所有取正值的元素之前,而不能保证所有取负值的元素之间的顺序和所有取正值的元素之间的顺序。如果需要保证所有元素的顺序不变,可以使用类似快速排序的分治算法。
阅读全文
相关推荐






