可以考虑用2个位置同时遍历:不等于0的数字 放在数组前面
C#
using System;
namespace test01
{
class Program
{
static void Main(string[] args)
{
int[] p = { 1, 3, 0, 2, 5, 7, 8, 0, 3 };
int num;
num = p.Length;
myfunc(p, num);
for (int i = 0; i < num; i++)
{
Console.Write(p[i]+" ");
}
Console.ReadKey();
}
static int[] myfunc(int[] p, int nSize)
{
int i, j;
for (i = 0, j = 0; j < nSize; j++)
{
if (p[j] != 0)
{
p[i++] = p[j];
}
}
while (i < nSize)
{
p[i++] = 0;
}
return p;
}
}
}
#include <stdio.h>
int* myfunc(int* p, int nSize) {
int i, j;
for (i = 0, j = 0; j < nSize; j++) {
if (p[j] != 0) {
p[i++] = p[j];
}
}
while (i < nSize) {
p[i++] = 0;
}
return p;
}
int main() {
int p[] = { 1, 3, 0, 2, 5, 7, 8, 0, 3 };
int num;
int i;
num = sizeof(p) / sizeof(int);
myfunc(p, num);
for (i = 0; i < num; i++) {
printf("%d ", p[i]);
}
puts("");
}
输出结果: