int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
#include <iostream>
using namespace std;
int a[9]={0,2,0,1,0,5,6,8,0};
int fun(int arr[],int length)
{
int i,j;
for(i = 0,j = i+1;i<length;)
{
if(arr[i] == 0)
{
if(arr[j] ==0)
{
j++;
if(j == length)
{
break;
}
}
else
{
arr[i] = arr[j];
arr[j] = 0;
}
}
else
{
i++;
}
}
return i;
}
void show()
{
for(int i=0;i<sizeof(a)/sizeof(int);i++)
{
cout<<a[i]<<" ";
}
}
int main()
{
cout<<fun(a,sizeof(a)/sizeof(int))<<endl;
show();
return 0;
}