int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序(按原来顺序),返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
int Func(int *A, int nSize)
{
int i, k, t = 1, Flag = 0;
for (i = 0; i < nSize-1; i++)//循环nSize-1次
{
if (A[i] == 0 && Flag == 0)//找出第一个下标为零的
{
k = i;
Flag = 1;
}
if (A[i] == 0 && A[i + 1] != 0)//相临两个数后者为零,将其前移t个为零的空间
{
A[i + 1 - t] = A[i + 1];
A[i + 1] = 0;
}
else if (A[i] == 0 && A[i + 1] == 0)
{
t++;
}
}
return k;
}
网友评论