題目:
int A[nSize],其中隱藏着若干0,其餘非0整數,寫一個函數int Func(int* A, int nSize),使A把0移至後面,非0整數移至
數組前面並保持有序,返回值爲原數據中第一個元素爲0的下標。(儘可能不使用輔助空間且考慮效率及異常問題,註釋規範且給出設計思路)
程序如下:不使用輔助空間
int Func(int* A, int nSize)
{
if(A == NULL)
{
return -1;
}
if(nSize < 1)
{
return 0;
}
int count = 0;
//計算所有爲0的元素個數
for(int k = 0; k < nSize; k++)
{
if(A[k] != 0)
{
count++;
}
}
if(count == 0)
{
return count;
}
int i = 0;
int num = nSize;
while(i < num)
{
if(A[i] == 0)
{
// 其後所有元素前移
for(int j = i; j < nSize - 1; j++)
{
A[j] = A[j+1];
}
A[--num] = 0;
continue;
}
i++;
}
return count;
}
最好情況:該數組中沒有爲0元素,時間複雜度爲O(n);
最壞情況:該數組中全部爲0元素,時間複雜度爲O(n/2*n/2);