我想对文件内容导入结构体数组进行排序的问题,能输出结果,但得不到我想要的功能,希望能帮我看看,十分感谢。
文件:StudentMessage.txt
0144253 罗兴 男 软件146 2015-01-01 13617095676 0245689 王八 女 销售123 2015-12-04 14523687532 0144255 罗龙 男 临床126 2012-03-03 13518966472 0144356 李四 女 软件126 2015-04-23 13275688542 0144276 麻子 男 苹峒?35 2012-03-05 15678624596 0144223 赵王 男 统计134 2013-14-13 13589421678 0144569 刘星 女 工商146 2015-11-24 14896475216 0144567 陈建 男 艺术148 2015-12-10 13472685486
代码:
#include<stdio.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define n 100
/*函数声明*/
void QuickSort(struct student a[n],int p,int r); //快速排序
int Partition(struct student a[n],int p,int r); //分治法
/********************* 定义社员信息结构体 **********/
struct student
{
//社员信息(学号,姓名,性别,专业班级,积分,等级,入团时间,电话);
char ID[10];
char name[10];
char sex[4];
char major[10];
char score[6];
char grade[6];
char time[15];
char phone[13];
};
void main()
{
int i;
int size;
student *a;
FILE *fp;
if((fp=fopen("StudentMessage.txt","rb+"))==NULL) //StudentMessage社员信息文件名
{
printf("文件打开失败!\n");
exit(1);
}
else
{
fseek(fp,0,SEEK_END); //移动文件指针到文件尾
size=ftell(fp)/sizeof(struct student); //得到文件中有多少条记录
printf("%d\n\n", size);
a=new student[ size];
rewind(fp);
for(i=0;i< size;i++)
{
fread(&a[i],sizeof(struct student),1,fp);
printf("%s %s\n",a[i].name,a[i].time);
}
printf("\n\n");
fclose(fp);
}
QuickSort(a,1,size-1);
for(i=size-1;i>=1;i--)
{
printf("%s %s %s %s %s %s %s %s",a[i].ID,a[i].name,a[i].sex,a[i].major,a[i].score,a[i].grade,a[i].time,a[i].phone);
printf("\n");
}
}
/*函数定义*/
void QuickSort(struct student a[n],int p,int r) //快速排序
{
int q;
if(p<r) //如果p大于等于r 那么就程序不执行
{
q = Partition(a,p,r); //调用分治法 找到q的值
QuickSort(a,p,q-1);
QuickSort(a,q+1,r);
}
}
int Partition(struct student a[n],int p,int r) //分治法,作用就是将数组分为A[p..q-1] 和A[q+1..r]
{ //然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]
int i,j;
student x,temp;
x = a[r]; //将最后一个值保存在x中
i = p-1; //开始的时候将i 移动到数组的外面
for( j=p; j<=r-1; j++)
{
if(strcmp(a[j].time,x.time))
{
i +=1;
temp = a[i]; //exchange
a[i] = a[j];
a[j] = temp;
}
}
temp = a[i+1]; //exchange
a[i+1] = a[r];
a[r] = temp;
return i+1; //返回q值
}
运行结果: