c++设任意n个整数存放于数组A(1:n)中,试编写算法,将所有正数排在所有负数前面(要求算法复杂度为0(n))。(难度系数2)
时间: 2024-02-05 14:03:39 浏览: 73
解法一:双指针法
设置两个指针i和j,初始时i指向数组第一个元素,j指向数组最后一个元素。然后,i向后移动,直到找到第一个负数;j向前移动,直到找到第一个正数。然后交换A(i)和A(j),直到i和j相遇为止。
算法实现:
```
void move(int A[], int n) {
int i = 0, j = n - 1;
while (i < j) {
while (i < j && A[i] > 0) i++;
while (i < j && A[j] < 0) j--;
if (i < j) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
}
```
解法二:单指针法
设置一个指针i,初始值为0。遍历数组,如果A[i]为正数,则将其与A[0]交换,i++;否则i不变。这样,遍历完数组之后,所有正数都排在了数组前面。
算法实现:
```
void move(int A[], int n) {
int i = 0;
for (int j = 0; j < n; j++) {
if (A[j] > 0) {
int temp = A[i];
A[i] = A[j];
A[j] = temp;
i++;
}
}
}
```
阅读全文