多關鍵字排序(一個快速排序加兩個氣泡排序)
#include <stdio.h>
#include <stdlib.h>
typedef struct
{
char name[20];
float math,english,computer;
float total;
}Student;
void Dbublesort(Student stu[],int n)
{
int i,j,swap=1;
for(i=1;i<n;i++) { swap=0; for(j=1;j<=n;j++) if(stu[i].math<stu[i].math) { stu[0]=stu[j]; stu[j]=stu[j+1]; stu[j+1]=stu[0]; swap=1; } if(swap==0) break; } for(i=1;i<n;i++) { swap=0; for(j=1;j<=n;j++) if(stu[i].total<stu[i].total) { stu[0]=stu[j]; stu[j]=stu[j+1]; stu[j+1]=stu[0]; swap=1; } if(swap==0) break; }
}
int Partition(Student stu[],int i,int j)
{
stu[0]=stu[i];
while(i<j)
{
while(i<j&&stu[i].english<stu[0].english)
j–;
if(i<j)
{
stu[i]=stu[j];
i++;
}
while(i<j&&stu[i].english>stu[0].english)
i++;
if(i<j)
{
stu[j]=stu[i];
j–;
}
stu[i]=stu[0];
return i;
}
}
void Quicksort(Student stu[],int s,int t)
{
int i;
if(s<t)
{
i=Partition(stu,s,t);
Quicksort(stu,s,i-1);
Quicksort(stu,i+1,t);
}
}
int main()
{
int i;
Student stu[11];
FILE *fp=NULL;
fp=fopen(“stu.txt”,“r”);
for(i=1;i<11;i++)
{
fscanf(fp,"%s%f%f%f%f",stu[i].name,&stu[i].math,&stu[i].english,&stu[i].computer,&stu[i].total);
}
Quicksort(stu,1,10);
Dbublesort(stu,10);
for(i=1;i<11;i++)
{
printf("%4s %4.1f %4.1f %4.1f %4.1f\n",stu[i].name,stu[i].math,stu[i].english,stu[i].computer,stu[i].total);
}
return 0;
}