结果不对且占用内存大,超时该怎么纠正

王阿姨洗完衣服后,通常的做法是在晾衣杆上自然晾干,假如晾晒的衣服在自然条件下1个单位的时间可以晒干A点湿度。为了加快晾晒速度,王阿姨买了1台烤干机,使用烤干机可以用1个单位的时间使1件衣服除开自然晒干的A点湿度外,还可再烘干B点湿度,但该烤干机在1个单位的时间内只能对1件衣服使用。因为种种原因N件衣服不一样湿,现在告诉你每件衣服的湿度,要你求出烘干所有衣服的最少时间(湿度为0为干)。
第一行N,A,B;接下来N行,每行一个数,表示衣服的湿度;

1 ≤ 湿度,A,B≤ 500000,1 ≤ N ≤ 500000。

一行一个整数,表示最少时间。


```c
#include<stdio.h>
void sort( int va[],  int n);
 int num[10000000] = {0};

int main()
{
     int N, A, B;
    scanf("%d%d%d", &N, &A, &B);

    int  i, j, k, n;
    for(i = 0; i < N; i++)//保存N个数到数组中
    {
        scanf("%d", &num[i]);
    }
    for(n = 0; N != 0; n++)//n表示经过的时间
    {
        sort(num, N);//对num数组的前N位从小到大排列
        for(i = 0; i < N; i++)//晒干后剩余湿度
            num[i] -= A;
        for(i = 0; num[i] <= 0 && i < N; i++);//判断num数组中已经晒干的个数
        if(i != N)//如果没有全部晒干
        {
            if(num[N - 1] <= B)//如果湿度最大的刚好被烘干在这一轮可以直接烘干
                N = N - i - 1;//N减去这一轮已经晒干的,再减去最大湿度被烘干
            else
            {
                num[N - 1] -= B;
                N =  N - i;
            }
            for(j = 0; j < N; j++)//将还未被烘干的衣服的序号往前挪到数组开始
            {
                num[j] = num[j + i];
            }
        }
        else//当全部被晒干的时候
        {
            n++;
            break;
        }
    }
    printf("%d", n );

    return 0;

}
void sort(int va[], int n)//冒泡排序法排列
{
    int i, j, k, temp;
    for(i = 0; i < n -1; i++)
    {
        j = 0;
        for(k = 0; k < n - i - 1; k++)
        {
            if(va[k] > va[k + 1])
            {
                temp = va[k];
                va[k] = va[k + 1];
                va[k + 1] = va[k];
                j = 1;
            }
        }
        if( j == 0)
            break;
    }
}