编辑代码

#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; /*查找成功,记录插入位置i*/
        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);
}