C语言完整代码写设任意n个整数存放与数组A[1…n]中,试编写算法并实现,将所有正数排在所有负数前面(要求:算法时间复杂度为O(n))
时间: 2024-11-15 22:23:34 浏览: 2
C语言之整数划分问题(递归法)实例代码
要在C语言中实现这个功能,你可以使用双指针法,遍历数组两次。第一次遍历找到所有的正数,并把它们存储到一个新的数组中;第二次遍历原数组,把剩下的元素(即负数)放到新数组的适当位置。以下是相应的C语言代码实现:
```c
#include <stdio.h>
void separatePositiveNegative(int A[], int n, int B[]) {
int i = 0, j = 0, k = 0;
while (k < n) {
if (A[k] > 0) {
B[i++] = A[k];
} else {
k++; // 直接跳过负数
}
}
// 将剩余的负数复制到B数组
while (i < n && j < n) {
if (A[j] > 0) {
B[i++] = A[j]; // 如果j处还是正数,移到下一个
} else {
B[j++] = A[j];
}
}
}
// 测试代码
int main() {
int A[] = {1, -5, 7, -3, 4, -2};
int n = sizeof(A) / sizeof(A[0]);
int B[n];
separatePositiveNegative(A, n, B);
for (int i = 0; i < n; i++) {
printf("%d ", B[i]); // 输出排序后的结果
}
return 0;
}
```
在这个代码里,我们首先找到所有正数并存放在`B`数组的前半部分,然后在原数组`A`中寻找负数并插入到`B`数组的后半部分。由于整个过程只遍历了数组一次,所以时间复杂度是O(n)。
阅读全文