C语言已知具有n个数组元素的一维数组A,请写一个算法,将该数组中所有值为0的元素都依次移到数组的前端,其他元素依次输出。
时间: 2024-09-13 17:07:19 浏览: 37
要实现这个算法,可以通过一个简单的遍历和交换的方式。我们可以设置两个指针,一个用于遍历数组(遍历指针),另一个用于记录非零元素应该存放的位置(非零元素指针)。遍历指针从数组的起始位置开始,遍历数组中的每一个元素。当遇到非零元素时,我们将其与非零元素指针所指向的位置的元素交换,并将非零元素指针向后移动一位。这样,所有的非零元素就会依次被放到数组的后端,而所有零元素则会被移动到数组的前端。
以下是C语言实现这个算法的一个示例代码:
```c
#include <stdio.h>
// 函数声明
void moveZerosToEnd(int arr[], int n);
int main() {
int A[] = {0, 1, 0, 3, 12};
int n = sizeof(A) / sizeof(A[0]); // 计算数组长度
moveZerosToEnd(A, n); // 调用函数
// 输出移动后的数组
for (int i = 0; i < n; i++) {
printf("%d ", A[i]);
}
printf("\n");
return 0;
}
// 函数定义
void moveZerosToEnd(int arr[], int n) {
int nonZeroIndex = 0; // 非零元素指针
for (int i = 0; i < n; i++) {
if (arr[i] != 0) {
// 交换非零元素到数组前端
int temp = arr[i];
arr[i] = arr[nonZeroIndex];
arr[nonZeroIndex] = temp;
nonZeroIndex++; // 移动非零元素指针
}
}
}
```
阅读全文