用c语言实现已知数组A[1..n]的元素类型为整型,设计算法调整A,使其左边的所有元素小于零,右边的所有元素大于等于零。(要求算法的时间复杂度和空间复杂度均为0(n))样例输入 5 5 6 -1 5 1 5 3 3 -1 -1 2 样例输出 -1 5 6 5 1 -1 -1 3 3 2
时间: 2023-06-11 15:10:37 浏览: 117
C语言整数输入的数组实现
5星 · 资源好评率100%
可以使用双指针法,一个指针从左往右扫描数组,另一个指针从右往左扫描数组,当左指针指向的元素为正数,右指针指向的元素为负数时,交换两个元素,直到左指针和右指针相遇为止。
具体实现如下:
```c
#include <stdio.h>
void adjust(int A[], int n) {
int left = 0, right = n - 1;
while (left < right) {
while (A[left] < 0 && left < right) {
left++;
}
while (A[right] >= 0 && left < right) {
right--;
}
if (left < right) {
int temp = A[left];
A[left] = A[right];
A[right] = temp;
}
}
}
int main() {
int n, A[100];
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
adjust(A, n);
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
```
时间复杂度和空间复杂度均为 O(n)。
阅读全文