用c语言实现给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
时间: 2024-05-09 16:18:23 浏览: 99
这个问题可以使用双指针法进行解决。
首先定义两个指针:j和i,初始时,i和j都指向数组的开头。
我们遍历整个数组,当遇到非零元素时,将其赋值到nums[j]上,同时i和j均向后移动一位。
当遇到0时,i向后移动一位,但是j不移动,这是因为我们需要将0移动到数组的末尾,j继续指向当前非零元素应该所在的位置。
最终,当i遍历完整个数组时,j之后的所有元素均应该是0,因为i和j之间的所有元素都是非零元素,而j之后的所有元素都被i赋值为了0.
下面是该算法的C实现代码:
```
void moveZeroes(int* nums, int numsSize){
int i,j;
j=0;
for(i=0;i<numsSize;i++){
if(nums[i]!=0){
nums[j]=nums[i];
j++;
}
}
for(;j<numsSize;j++){
nums[j]=0;
}
}
```
需要注意的是,我们将0移动到数组的末尾时,只需要将nums[i]赋值为0即可,不需要进行j的移动操作。
相关问题
用C语言写给定一个整数数组 nums,将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序
```
#include <stdio.h>
void moveZeroes(int* nums, int numsSize){
int i, j, temp;
for(i=0, j=0; i<numsSize; i++){
if(nums[i] != 0){
temp = nums[i];
nums[i] = nums[j];
nums[j++] = temp;
}
}
}
int main(){
int nums[] = {0, 1, 0, 3, 12};
int numsSize = sizeof(nums)/sizeof(nums[0]);
moveZeroes(nums, numsSize);
for(int i=0; i<numsSize; i++){
printf("%d ", nums[i]);
}
return 0;
}
```
C语言给定一个整数数组nums,将所有0 移动到数组的末尾,同时保持非零元素的相对顺序
:可以使用双指针法,一个指针指向当前处理的位置,另一个指针指向下一个非零元素应该存放的位置。遍历一次数组即可完成移动操作。代码实现如下:
void moveZeroes(int* nums, int numsSize){
int i, j = 0;
for (i = 0; i < numsSize; i++) {
if (nums[i] != 0) {
nums[j++] = nums[i];
}
}
while (j < numsSize) {
nums[j++] = 0;
}
}
阅读全文