题目是:
int A[nSize],其中隐藏着若干0,其余非0整数,写一个函数int Func(int* A, int nSize),使A把0移至后面,非0整数移至 数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)
这是自己的写法。c++代码
#include "stdafx.h"
#include "iostream"
using namespace std;
void swap(int &a,int &b)
{
a=a+b;
b=a-b;
a=a-b;
}
void F(int *A,int nsize)
{
for(int i=nsize-1;i>=0;--i)
for(int j=i+1;j<=nsize;++j)
{
int p=i;int q=j;
while(A[p]==0&&A[q]!=0&&q<nsize)
{
swap(A[p],A[q]);
p=q;
q++;
}
}
}
int main(int argc, char* argv[])
{
int B[10]={0,1,23,3,0,0,3,4,2,0};
int m=10;
F(B,m);
for(int i=0;i<10;++i)
cout<<B[i]<<endl;
return 0;
}
这是一个基于冒泡的算法,当然和冒泡算法有所不同