//移动零
void moveZeroes(int* nums, int numsSize) {
for (int i = 0; i<numsSize; i++) //从外层遍历
{
if (nums[i] == 0) //遇到0
{
for (int j = i + 1; j<numsSize; j++) //从下一个元素开始遍历,遇到非0值,两者交换
{
if (nums[j] != 0)
{
nums[i] = nums[j];
nums[j] = 0;
break;
}
}
}
}
}
//优秀代码
void moveZeroes(int* nums, int numsSize) {
int zeroNum = 0; //记有多少个 0
int i;
for (i = 0; i < numsSize; i++) {
if (nums[i] == 0) {
zeroNum++;
}
else { //把非0值插入顺序数的第 i - zeroNum 的位置
nums[i - zeroNum] = nums[i];
}
}
for (i = numsSize - zeroNum; i < numsSize; i++) { //最后的数字全部填为 0
nums[i] = 0;
}
}