C语言已知具有n个数组元素的一维数组A,请写一个算法,将该数组中所有值为0的元素都依次移到数组的前端,其他元素依次输出。 【输入形式】 第一个数为输入数字的个数,其后为数组的数字 【输出形式】 输出相应的数组
时间: 2024-09-13 22:07:16 浏览: 33
首先,需要一个算法来实现将数组中所有值为0的元素移到数组前端,其他元素依次输出。下面是一个简单的算法描述和实现:
1. 初始化两个指针,left指向数组的起始位置,right指向数组的最后一个元素。
2. 遍历数组,当left指向的元素不为0时,left向后移动。
3. 当left与right都指向非零元素时,继续移动left。
4. 如果left指向的元素为0,right向左移动,直到遇到0或者left等于right。
5. 如果left和right都指向0,则left向后移动,right向左移动。
6. 当left和right指向的元素值为0时,交换这两个元素。
7. 重复步骤2-6直到left超过right。
以下是该算法的C语言代码实现:
```c
#include <stdio.h>
void moveZeros(int A[], int n) {
int left = 0, right = n - 1;
while (left < right) {
// 移动left到下一个非零元素
while (left < right && A[left] != 0) {
left++;
}
// 移动right到下一个零元素
while (left < right && A[right] == 0) {
right--;
}
// 交换left和right指向的元素
if (left < right) {
int temp = A[left];
A[left] = A[right];
A[right] = temp;
}
}
}
void printArray(int A[], int n) {
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("\n");
}
int main() {
int n;
printf("请输入数组的长度:");
scanf("%d", &n);
int A[n];
printf("请输入数组元素:");
for (int i = 0; i < n; i++) {
scanf("%d", &A[i]);
}
moveZeros(A, n);
printf("处理后的数组为:");
printArray(A, n);
return 0;
}
```
使用此程序,用户可以输入数组的长度和数组元素,程序将会输出处理后的数组,其中所有值为0的元素都被移动到了数组的前端。
阅读全文