已知整型数组a中有若干元素的值为零,编写函数int func(int *a, int n)

已知整型数组a中有若干元素的值为零,编写函数int func(int *a, int n),将a中的零移至数组后面,非零整数移至数组前面并从小到大排序。形参n表示数组中元素的个数,函数返回原数组中第一个值为零的元素的下标。在main函数中调用该函数。

img

#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;
}