方法1:空间法
int sort_array_zero(int *pArr, int iSize)
{
int i = 0, iFirstZero = 0;
int iZeroIdx = 0, iNzeroIdx = 0;
int *p = NULL;
if(!pArr || iSize <= 0) return -1;
p = (INT32*)malloc(iSize*sizeof(INT32));
if(!p) return -1;
for(i = 0, iZeroIdx = iSize - 1; i < iSize; i++)
{
if(pArr[i] == 0)
{
p[iZeroIdx--] = pArr[i];
if(iFirstZero == 0) iFirstZero = i + 1;
}
else
{
p[iNzeroIdx++] = pArr[i];
}
}
memcpy(pArr, p, iSize*sizeof(INT32));
if(!p) free(p);
return iFirstZero - 1;
}
方法二:查找到0,记录0的个数,再替换
int sort_array_zero(int *pArr, int iSize)
{
int i = 0, iFirstZero = 0;
int iZeroIdx = 0;
if(!pArr || iSize <= 0) return -1;
for(i = 0; i < iSize; i++)
{
if(pArr[i] == 0)
{
iZeroIdx++;
if(iZeroIdx == 1)
{
iFirstZero = i;
}
}
else
{
if(iZeroIdx != 0)
{
pArr[i-iZeroIdx] = pArr[i];
pArr[i] = 0;
}
}
}
return iFirstZero;
}
两种方法都简单测试了,各位网友请指出有什么待提高的地方,或者有什么更好的方法,欢迎评论。