求助,请大神看看怎么排序不超时!!
											PAT BASIC 1015,德才论,段错误 ,求助题目网站http://www.
写得特别烂,要喷从轻
Q1:不知道怎么一个排序语句满足题目要求所以写了两个
Q2:答案错误的地方是哪呢(从内存看)
测试点 结果 用时(ms) 内存(kB) 得分/满分
0 答案正确 1 264 12/12
1 答案正确 1 256 2/2
2 答案错误 92 540 0/3
3 运行超时 0/3
4 运行超时 0/3
5 答案正确 1 264 2/2
程序代码:
#include<stdio.h>
#include<string.h>
struct student 
{
    long long num;
    int mor;
    int wisd;
};
int main()
{
    struct student stu[5][100001];
    int i=1,count[5]={0,1,1,1,1},N,pass,k,pre,stuMor,stuWisd;
    long long num;
    int aStu(int d,int c,int pre);
    int bStu(int d,int c,int pre);
    int cStu(int d,int c,int pre);
    
    void sort(struct student stu[][100001],int k,int n);
    
    scanf("%d%d%d",&N,&pass,&pre);
    
    while(i <= N)
    {
        scanf("%lld %d %d",&num,&stuMor,&stuWisd);
        if(stuMor >= pass && stuWisd >= pass)
        {
            if (aStu(stuMor,stuWisd,pre))
            {
                stu[1][count[1]].num=num;
              stu[1][count[1]].mor = stuMor;
              stu[1][count[1]].wisd = stuWisd;
              count[1]++;
              count[0]++;
            }
            else if (bStu(stuMor,stuWisd,pre))
            {
                stu[2][count[2]].num=num;
              stu[2][count[2]].mor = stuMor;
              stu[2][count[2]].wisd = stuWisd;
              count[2]++;
              count[0]++;
            }
            else if (cStu(stuMor,stuWisd,pre))
            {
                stu[3][count[3]].num=num;
              stu[3][count[3]].mor = stuMor;
              stu[3][count[3]].wisd = stuWisd;
              count[3]++;
              count[0]++;
            }
            else 
            {
              stu[4][count[4]].num=num;
              stu[4][count[4]].mor = stuMor;
              stu[4][count[4]].wisd = stuWisd;
              count[4]++;
              count[0]++;
            }
        }
        i++; 
    }
    
    printf("%d\n",count[0]);
    
    for(k = 1;k <= 4;k++)
    {
        sort(stu,k,count[k]-1);
    }
    
    for(i = 1;i <= 4;i++)
    {
        for(k = 1;k <= count[i]-1;k++)
        {
            printf("%lld %d %d\n",stu[i][k].num,stu[i][k].mor,stu[i][k].wisd);
        }
    }
}
int aStu(int d,int c,int pre)
{
    return d >= pre && c >= pre;
}
int bStu(int d,int c,int pre)
{
    return d >= pre && c < pre;
}
int cStu(int d,int c,int pre)
{
    return d < pre && c < pre && d > c;
}
void sort(struct student stu[][100001],int k,int n)
{
    int i,j,key,mini;
    struct student Key;
    
    for(j = 1;j < n;j++)
    {
        mini = 1;
        for(i = 1;i <= n-j+1;i++)
        {
            if(stu[k][mini].mor + stu[k][mini].wisd == stu[k][i].mor + stu[k][i].wisd)
            {
                if(stu[k][mini].mor > stu[k][i].mor) 
                {
                    mini = i;
                    //printf("0\n");
                }
                else if(stu[k][mini].mor == stu[k][i].mor)
                {
                  if (stu[k][mini].num < stu[k][i].num)
                    {
                        mini = i;
                        //printf("1\n");
                    }
                }
            }
        }
          Key = stu[k][mini];
            stu[k][mini] = stu[k][i-1];
            stu[k][i-1] = Key;
            //for(key = 1; key <= n;key++) printf("%lld %d %d\n",stu[k][key].num,stu[k][key].mor,stu[k][key].wisd);
    }
            
    for(j = 2;j <= n;j++)
    {
        i = j - 1;
        key = stu[k][j].mor + stu[k][j].wisd;
        Key = stu[k][j];
        while (i > 0 && stu[k][i].mor + stu[k][i].wisd < key)
        {
            stu[k][i+1]=stu[k][i];
            i--;
        }
        stu[k][i+1] = Key;
    }
}
[ 本帖最后由 caixin_oo1 于 2014-12-1 22:54 编辑 ]



											
	    

	


