给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。用c语言帮我实现
时间: 2024-10-15 10:11:56 浏览: 41
在 C 语言中,你可以使用双指针法来解决这个问题。首先创建两个指针,一个指向数组的开始,另一个指向第一个找到的非零元素。遍历数组的同时,如果遇到非零元素,就将其移动到已排序的部分并前进指针;若遇到零,则直接跳过。当遍历完后,所有的非零元素都已经放置到了适当的位置,剩余的都是零,可以直接填入。
下面是一个简单的实现示例:
```c
#include <stdio.h>
void moveZeroes(int* nums, int n) {
if (n == 0 || nums[0] != 0) return; // 如果数组为空或者第一个元素不是0,不需要处理
int non_zero = 0; // 非零元素的指针
for (int i = 0; i < n; ++i) {
if (nums[i] != 0) { // 遇到非零元素
// 将非零元素移到正确位置
nums[non_zero++] = nums[i];
}
}
// 将剩余的0填充到末尾
while (non_zero < n) {
nums[non_zero++] = 0;
}
}
// 测试代码
int main() {
int nums[] = {0, 1, 0, 3, 12};
int n = sizeof(nums) / sizeof(nums[0]);
moveZeroes(nums, n);
printf("移除0后的数组: ");
for (int i = 0; i < n; ++i) {
printf("%d ", nums[i]);
}
printf("\n");
return 0;
}
```
运行上述程序,你会看到输出类似于 `1 3 12 0 0` 的结果。
阅读全文
相关推荐
















