有关c语言的编程问题

有一个数组int A[SIZE],其中里面包含若干0和其余非0的整数,写一个函数int Func(int* A, int nSize),使A把0元素移至后面,非0整数移至数组前面并保持从大到小排序,函数的返回值为第一个为0的元素的下标。
使用#define SIZE 100定义数组维数,并使用rand()函数随机生成数组A的元素,其中大于20000的数都强制为0;怎么写?

一个简单的实现:

#include <stdio.h>
#include <stdlib.h>
#define SIZE 100

int Func(int *A ,int nSize){
    
    int i,j;
    int max;
    int temp;
    for(i=0;i<nSize-1;i++){
    
        for(j=i;j<nSize;j++){
            
            if(A[i]<A[j]){
                temp=A[i];    
                A[i]=A[j];
                A[j] =temp;
            }
        } 
    }
//    
//    printf("Afeter sort:\n");
//    for(i=0;i<SIZE;i++){
//        printf("%d ",A[i]);
//        if((i+1)%5==0){
//            printf("\n");
//        }
//    }
    int index=-1;
    for(i=0;i<nSize;i++){
        if(A[i]==0){
            index=i;
            return index;
        }
    }
} 

int main(void){
    
    int A[SIZE];
    
    int i;
    int num;
    for(i=0;i<SIZE;i++){
        num    = rand();
        if(num>20000){
            num=0;
        }
        
        A[i] =num;
//        printf("%d ",A[i]);
//        if((i+1)%5==0){
//            printf("\n");
//        }
    }
    

    
    printf("数组第一个为0的元素的下标为:%d.\n",Func(A,SIZE));
    
    return 0;
}