结构体

来源:互联网 发布:大数据的4v特征 编辑:程序博客网 时间:2024/05/18 12:36

对于给定的结构体存放学生的信息,已知一组数据:{"GA005",85},{"GA003",76}, {"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}

我想把学生的信息按照成绩升序排列,该怎么办?你可能会说这不就是简单的排序吗?我可以用好多种方法搞定它,是的,但是当满足排序条件的时候,交换的不仅仅是成绩,而是整个结构体的数据类型。

#include <stdio.h>
#define N 16
typedef struct
{char num[10];
   int s;
} STREC;
void fun(STREC a[])
{
int i,j;
STREC t;
for(i=0;i<N-1;i++)
for(j=0;j<N-i-1;j++)
{

if(a[j].s<a[j+1].s)
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;

}



}
/*void fun(STREC a[])
{
STREC tmp;
int i,j;
for(i=0; i<N; i++)
  for(j=i+1; j<N; j++)
    if(a[i].s<a[j].s){
      tmp=a[i];
      a[i]=a[j];
      a[j]=tmp;
    }
}*/
main()
{STREC s[N]={{"GA005",85},{"GA003",76}, {"GA002",69},{"GA004",85},{"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},{"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},{"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};
   int i;FILE *out ;
   fun(s);
   printf("The data after sorted :\n");
   for(i=0;i<N; i++)
   {if((i)%4==0)printf("\n");
      printf("%s  %4d ",s[i].num,s[i].s);
   }
   printf("\n");
   out = fopen("out.dat","w");
   for(i=0;i<N; i++)
   {if((i)%4==0 && i) fprintf(out, "\n");
      fprintf(out, "%4d ",s[i].s);
   }
   fprintf(out,"\n");
   fclose(out);
}

0 0
原创粉丝点击