用大一水平的c++语言写一个代码满足以下要求:设任意n个整数存放于数组A[1…n]中,试设计算法,将所有正数排在所有负数前面(要求:算法时间复杂度为n)
时间: 2024-12-06 07:27:23 浏览: 15
当然可以。我们可以使用两个指针,一个指向数组开始(正数),另一个指向数组结束(负数)。然后我们逐个比较这两个位置的元素,如果遇到正数就移动正数指针,如果是负数则不动。当正数指针超过负数指针时,我们就完成了所有的正数到前的任务。
以下是简单的 C++ 代码实现这一要求:
```cpp
#include <iostream>
using namespace std;
void separatePositiveNegative(int A[], int n) {
int pos = 0; // 正数指针
int neg = n - 1; // 负数指针
while (pos <= neg) {
// 如果正数指针处的元素是负数,向右移动指针
if (A[pos] < 0) {
++pos;
}
// 如果负数指针处的元素是正数,不动,等待遍历结束后自动放置在其后
else if (A[neg] > 0) {
--neg;
}
// 否则交换两个位置的元素,保持顺序
else {
swap(A[pos], A[neg]);
++pos;
--neg;
}
}
}
int main() {
int A[] = {5, -3, 7, -1, 0, -4}; // 假设这是输入的数组
int n = sizeof(A) / sizeof(A[0]);
separatePositiveNegative(A, n);
cout << "Positive numbers before negative ones: ";
for (int i = 0; i < n; ++i) {
cout << A[i] << " ";
}
return 0;
}
```
运行这个程序后,正数会出现在负数之前。
阅读全文