PTA 乙级 1019 数字黑洞 (qsort排序竟然超时?)

问题遇到的现象和发生背景

使用qsort快速排序会超时?
奇怪?
请大家百忙之中看一看
感谢感谢!

img

问题相关代码,请勿粘贴截图
#include<stdio.h>
#include<stdlib.h>
int a[5];//声明一个全局数组变量,保存主函数循环中的数
int cunchu(int n)//此函数是将计算将数据的每一位存储到数组中
{
    int t = 0;
    while (n > 0)
    {
        a[t++] = n % 10;
        n /= 10;
    }
    return t;// 返回位数
}
int cmp_int1(const void* e1, const void* e2)
{
    return *(int*)e2 - *(int*)e1;
}
int cmp_int2(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}
int main()
{
    int n = 0; int z = 1;//这里声明的z=1只是可以让循环跑起来的作用
    scanf("%d", &n);
    while (z != 6174 && z != 0)
    {
        int x = 0, y = 0;
        int t = cunchu(n);//将这个数的每一位存储到数组中;
        qsort(a, t, sizeof(a[0]), cmp_int1);//降序排序
        for (int i = 0; i < t; i++)
            x = x * 10 + a[i];//随之转化到最大值
        qsort(a, t, sizeof(a[0]), cmp_int2);//升序排序
        for (int i = 0; i < t; i++)
            y = y * 10 + a[i];//随之转化到最小值
        z = x - y;//计算这两个数的差值
        printf("%04d - %04d = %04d", x, y, z);//打印数据
        if (z != 6174)printf("\n");//控制输出格式
        n = z;
    }
    return 0;
}

运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果

从升序变为降序,首尾交换就好了,不需要qsort吧