#include <stdio.h>
#define N 10
typedef struct{
char name[10];
float avg;
}Student;
int BinSort(Student *a,int n,Student x);
void Display(Student *a,int n);
void main()
{
Student a[N]={{"Zhao",95},{"Qian",90},{"Sun",86},{"Li",75}},x;
int n=4;
printf("初始 %d 位学生的信息表如下:\n",n);
Display(a,n);
printf("\n\n");
printf("请输入学生姓名:");
scanf("%s",x.name);
printf("请输入平均成绩:");
scanf("%f",&x.avg );
n=BinSort(a,n,x);
printf("\n折半排序后 %d 位学生的信息表如下:\n",n);
Display(a,n);
printf("\n");
}
int BinSort(Student *a,int n,Student x)
{
int low,high,mid;
int i,j;
low=0;
high=n-1;
while(low<=high)
{
mid=(low+high)/2;
if(x.avg==a[mid].avg)
{
i=mid+1;
break;
}
else if(x.avg>a[mid].avg)
high=mid-1;
else
low=mid+1;
}
if(low>high) i=low;
for(j=n-1; j>=i; j--)
a[j+1]=a[j];
a[i]=x;
n++;
return n;
}
void Display(Student *a,int n)
{
int i;
for(i=0; i<n; i++)
printf("\n%-10s %-6.1f",a[i].name,a[i].avg);
}