给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 用C语言实现。
时间: 2024-10-22 16:29:33 浏览: 62
在C语言中,我们可以利用双指针法来解决这个问题,即使用两个指针,一个指向当前非零元素的位置(i),另一个从数组的开头开始查找0(j)。当找到一个非零元素时,就将其移动到已排序的部分的末尾,然后将 j 指向下一个可能的0。以下是详细的步骤:
```c
void moveZeroes(int* nums, int n) {
if (n == 0 || nums[0] != 0) return; // 如果数组为空或者第一个元素不是0,直接返回
int i = 1; // 非零元素的指针
for (int j = 0; j < n; ++j) { // 遍历整个数组
if (nums[j] != 0) { // 找到非零元素
// 将非零元素移到已排序部分的末尾
nums[i++] = nums[j];
}
}
// 将剩余的0填入未使用的空间
while (i < n) {
nums[i++] = 0;
}
}
```
这个函数接受一个整型数组`nums`和它的长度`n`作为输入,它不会复制数组,而是直接在原数组上操作。如果遍历完整个数组都没有找到非零元素,说明数组中全是0,所以不需要做任何操作。
阅读全文
相关推荐








