定义函数,数组排序,调用函数

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


#include <stdio.h>
int func(int *a, int n);
int main(){
    int i,n;
    printf("请输入数组元素个数:\n");
    scanf("%d", &n);
    int a[n];
    printf("请输入数组元素:\n");
    for(i = 0;i < n;i++){
        scanf("%d",&a[i]);
    }
    int index = func(a, n);
    printf("排序后的数组:\n");
    for(i = 0;i < n;i++){
        printf("%d ",a[i]);
    }
    printf("\n原数组中第一个0的下标是%d",index);
}
int func(int *a, int n){
    int i,j,index = -1;
    for(i = 0;i < n;i++){
        if(a[i] == 0){
            index = i;
            break;
        }
    }
    for(i = 0;i < n-1;i++){
        for(j = 0;j < n-1-i;j++){
            if(a[j] > a[j+1]){
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }

    int cnt = 0;
    for(i = 0;i < n;i++){
        if(a[i] == 0){
            cnt ++;
        }
    }
    for(i = 0;i < n;i++){
        if(a[i] == 0){
            for(j = i;j < n - cnt;j++){
                a[j] = a[j + cnt];
            }
            for(j = n - cnt;j < n;j++){
                a[j] = 0;
            }
            break;
        }
    }
    return index;
}
#include <stdio.h>
int func(int *a, int n){
    int p=0;
    int t=n-1;
    int tmp;
    int i,j;
    while(p<=t){
        if(a[p]==0){
            tmp=a[t];
            a[t]=a[p];
            a[p]=tmp;
            t--;
        }
        else{
            tmp=a[p];
            for(i=p-1;i>=0;i--){
                if(a[i]>tmp){
                    a[i+1]=a[i];
                }
                else break;
            }
            a[i+1]=tmp;
            p++;
        }
    }
    return t+1;
}
int main(void) { 
    int a[1000],i,n;
    //输入n
    scanf("%d",&n);
    //输入n个数
    for(i=0;i<n;i++)
    scanf("%d",&a[i]);
    int res = func(a,n);
    printf("第一个值为零的元素的下标:%d\n",res);
    printf("排序后的数组:");
    for(i=0;i<n;i++)
    printf("%d ",a[i]);
    return 0;
}

有用请采纳

#include<stdio.h>
int func(int* a, int n);
void mpSort(int *a, int n); 

int main(){
    int n;   // n个数
    scanf("%d", &n);
    int a[n];  // 输入 n个数
    for(int i = 0; i < n; i++)
        scanf("%d", &a[i]);
    printf("第一个零索引 = %d\n", func(a, n)); 
    
//    for(int i = 0; i < n; i++)  // 输出最终结果 
//        printf("%d  ", a[i]);
        
}


int func(int* a, int n){
    bool flag = true;
    int index;  // 第一个0的位置 
    int count = 0; // 统计零的个数 
    
    int temp[n]; // 用于暂存非零元素 
    int k = 0;
    for (int i = 0; i < n; i++){
        if (flag && a[i] == 0){
            index = i;
            flag = false; 
        }
        
        if (a[i] == 0)   // 统计零的个数 
            count += 1;
        
        else
            temp[k++] = a[i];    
    }
    
    mpSort(temp, n - count);
    int i;
    for(i = 0; i < n - count;i++)
        a[i] = temp[i];
    
    for(; i < n; i++)
        a[i] = 0;
    
    return index; 
}

void mpSort(int* a, int n){   // 排序 , n为元素个数 
    int temp;
    for(int i = 0; i < n - 1; i++){
        for (int j = 0; j < n - i - 1; j++){
            if(a[j] > a[j + 1]){
                temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp; 
            }
        }
    }
}

我这个应该能用吧!