已知整型数组a中有若干元素的值为零,编写函数int func(int *a, int n),将a中的零移至数组后面,非零整数移至数组前面并从小到大排序。形参n表示数组中元素的个数,函数返回原数组中第一个值为零的元素的下标。在main函数中调用该函数。
#include <stdio.h>
int func(int *a, int n)
{
int j,k,h=n-1;
int pos=-1;
for(j=0;j<n;j++)
{
if(a[j]==0)
{
pos=j;
break;
}
}
for(j=0;j<h;j++)
{
if(a[j]==0)
{
a[j]=a[h];
a[h]=0;
h--;
}
}
j=0;
while(j<h-1)
{
k=0;
while(k<h-1)
{
if(a[k]>a[k+1])
{
int tem=a[k];
a[k]=a[k+1];
a[k+1]=tem;
}
k++;
}
h--;
}
return pos;
}
int main()
{
int n=10;
int j;
int t[10]= {3,6,6,0,7,2,5,9,0,1};
for(j=0; j<n; j++)
{
printf("%d ",t[j]);
}
printf("\n");
printf("\n%d\n",func(t,n));
for(j=0; j<n; j++)
{
printf("%d ",t[j]);
}
printf("\n");
return 0;
}
#include <stdio.h>
int func(int *a, int n)
{
int j,k,h=n-1;
int pos=-1;
for(j=0; j<n; j++)
{
if(a[j]==0)
{
pos=j;
break;
}
}
for(j=n-1; j>=0; j--)
{
if(a[j]==0)
{
int tem=a[j];
a[j]=a[h];
a[h]=tem;
h--;
}
}
j=0;
while(j<h)
{
k=0;
while(k<h)
{
if(a[k]>a[k+1])
{
int tem=a[k];
a[k]=a[k+1];
a[k+1]=tem;
}
k++;
}
h--;
}
return pos;
}
int main()
{
int n=10;
int j;
int t[10]= {0,0,6,0,7,0,5,0,0,0};
for(j=0; j<n; j++)
{
printf("%d ",t[j]);
}
printf("\n");
printf("\n%d\n",func(t,n));
for(j=0; j<n; j++)
{
printf("%d ",t[j]);
}
printf("\n");
return 0;
}