数组的排序

例如 2 3 4 5 6 0 0 0 4 5 

结果 2 3 4 4 5 5 6 0 0 0 

int sort(int* a,int len) {
    int i = 0;
    int count = 0;

    for (i = 0; i < len;i++,a++) {

        if (*a == 0) {
            count++;                                                         //求含0的个数
        }

    }
    printf("数组中含0的个数为%d\n", count);
    
    return count;


}

int main() {
    int arr[99] = {0};
    int i = 0;
    int j = 0;
    int tmp = 0;
    int count = 0;
    int* end = arr;
    int n = 0;
    printf("请输入数组中的元素 中间有空格隔开 输入完毕后回车确定\n");
    do {
        scanf("%d", &j);
        arr[i++] = j;
        n++;

    } while (getchar() != '\n');                                    //自己输入数组元素
    
    count = sort(arr, n);
    for (i = 1; i < n; i++) {
        end++;
     }                                                                        //指向最后一个元素的地址

    for (i = 0; i < n; i++) {
        j = 0;
        for (j = i + 1; j < n; j++) {
            if (arr[i] > arr[j]) {
                tmp = arr[i];
                arr[i] = arr[j];                        //先数组排序
                arr[j] = tmp;
            }
        }
    }
    
    for (i = 0; i < count; i++) {

        for (j = 0; j < n; j++) {

            if (arr[j] == 0) {                                             //把数字0放到最后一位
                arr[j] = *end;
                *end-- = 0;
                break;
            }

        }

    }

    for (i = 0; i < n-count; i++) {
        j = 0;
        for (j = i + 1; j < n-count; j++) {
            if (arr[i] > arr[j]) {
                tmp = arr[i];
                arr[i] = arr[j];                                        //再排序把数字0那几位元素个数 去掉
                arr[j] = tmp;
            }
        }
    }

    for (i = 0; i < n; i++) {
        printf("%d ", arr[i]);

    }
    return 0;
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值