1. 程式人生 > >多關鍵字排序(一個快速排序加兩個氣泡排序)

多關鍵字排序(一個快速排序加兩個氣泡排序)

#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;

}