用C语言编写算法,实现下面功能:设任意n个整数存放于数组A(1:n)中,试编写算法,将所有正数排在所有负数前面(要求算法复杂性为0(n))
时间: 2024-03-25 07:36:59 浏览: 52
C语言程序设计-编写程序。从键盘读入8个整数存入数组a中并输出这8个数据。和、最大值、最小值及平均值。正数之和、负数之和
5星 · 资源好评率100%
以下是使用 C 语言编写的算法实现:
```c
#include <stdio.h>
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void partition(int arr[], int n) {
int i = 0, j = n - 1;
while (i < j) {
while (arr[i] > 0 && i < j) i++;
while (arr[j] < 0 && i < j) j--;
swap(&arr[i], &arr[j]);
}
}
int main() {
int arr[] = {3, -2, 1, 0, -5, 2, 7, -1, 4};
int n = sizeof(arr) / sizeof(int);
partition(arr, n);
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
printf("\n");
return 0;
}
```
该算法的思路为使用两个指针 i 和 j,分别指向数组的头和尾。当 i 指向的数为正数时,i 向右移动;当 j 指向的数为负数时,j 向左移动;当 i 和 j 指向的数分别为负数和正数时,则交换它们的位置。最终,所有正数都排在了负数的前面。
该算法的时间复杂度为 O(n),由于只使用了常数个额外空间,空间复杂度为 O(1)。
阅读全文