题目描述
若存在一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序
C 语言具体代码实现
作者无想法!!!借鉴官方的方法:双指针
????????使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部,右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移
#include <stdio.h>
void swap(int *a, int *b){
int t = *a;
*a = *b, *b = t;
}
void moveZeroes(int *nums, int numsSize){
int left = 0, right = 0;
while(right < numsSize){
if(nums[right]){ // 非零
swap(nums + left, nums + right);
left++;
}
right++;
}
}
int main(void){
int nums[] = {0, 1, 0, 3, 12};
moveZeroes(nums, 5);
// 格式化输出
printf("[");
for(int i = 0; i < 5; i++){
if(i == 4){
printf("%d", nums[i]);
}else{
printf("%d,", nums[i]);
}
}
printf("]");
// [1,3,12,0,0]
return 0;
}
|