int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
void swapp(int *a, int *b)
{
int t;
t = *a;
*a = *b;
*b = t;
}
void fun(int *a, int n)
{
assert(a);
int *pFirZero, *pNum, pTmp;
pFirZero = a;
pNum = a;
while((pNum != (a + n - 1)) && (pFirZero != (a + n -1)))
{
while ((*pFirZero != 0) && (pFirZero != (a + n -1 )))
{
pFirZero++;
}
if (pFirZero > pNum)
{
pNum = pFirZero;
}
while ((*pNum == 0) && (pNum != (a + n-1)))
{
pNum++;
}
swapp(pFirZero, pNum);
}
}
int main()
{
int a[] = {1,2,0,0,3,0,4};
fun(a,7);
int b;
for (int i = 0;i < 7;i++)
{
printf("%d\n",a[i]);
}
scanf("%d",&b);
return 1;
}