wang2679958237 2017-05-05 12:48 采纳率: 15.8%
浏览 912

为什么二分查找找不出要查找学生的名次?

代码如下:
#include
#define MAX 100
typedef struct {
int n;
char name[20];
int s;
} datatype;
typedef struct {
datatype data[MAX];
int len;
}Rec, *Table;

void CreateTable(Table r);
void InsertSort(Table r);
void BubbleSort(Table r);
void SelectSort(Table r);
void Output(Table r);
int Binary(Table r, int k);

void CreateTable(Table r)
{
int i;
printf("\ninput number of nodes\n\t");
scanf("%d", &r->len);
printf("\ninput num,name,s\n");
for (i = 1; i <= r->len; i++)
{
printf("\t");
scanf("%d %s %d", &r->data[i].n, r->data[i].name, &r->data[i].s);
}
}
void InsertSort(Table r)
{
int i, j;
for (i = 2; i <= r->len; i++)
{
j = i - 1;
r->data[0] = r->data[i];
while (r->data[0].ndata[j].n)
{
r->data[j + 1] = r->data[j];
j--;
}
r->data[j + 1] = r->data[0];
}
}
void BubbleSort(Table r)
{
int i, j; datatype t;
int flag = 1;
for (i = 1; ilen&&flag; i++)
{
flag = 0;
for (j = r->len; j>i; j--)
if (r->data[j].n>r->data[j - 1].n)
{
t = r->data[j];
r->data[j] = r->data[j - 1];
r->data[j - 1] = t;
flag = 1;
}
}
}
void SelectSort(Table r)
{
int i, j, p;
datatype t;
for (i = 1; i <= r->len; i++)
{
p = i;
for (j = i + 1; j <= r->len; j++)
if (r->data[j].s>r->data[p].s)
p = j;
if (p != i)
{
t = r->data[p];
r->data[p] = r->data[i];
r->data[i] = t;
}
}
}
void Output(Table r)
{
int i;
for (i = 1; i <= r->len; i++)
printf("\n\t%d %s %d", r->data[i].n, r->data[i].name, r->data[i].s);
}
int Binary(Table r, int k)
{
int low, mid, high;
low = 1;
high = r->len;
while (low<=high)
{
mid = (low + high) / 2;
if (k == r->data[mid].n) {
return mid;
}
else if (kdata[mid].n)
{
high = mid - 1;
}
else
{
low = mid + 1;
}
}
return 0;
}
void main()
{
int num;
int p;
Rec R;
CreateTable(&R);
printf("\n");
printf("\n直接插入法按学号排成升序的结果为:");
InsertSort(&R);
Output(&R);
printf("\n冒泡法按学号排成降序的结果为:");
BubbleSort(&R);
Output(&R);
printf("\n简单选择法按成绩排降序的结果为:");
SelectSort(&R);
Output(&R);
printf("\n");
printf("需要查找排名的学生学号:");
scanf("%d", &num);
p = Binary(&R, num);
if (p == 0) {
printf("没有此同学的成绩记录!");
}
else {
printf("该同学成绩排名第%d", p);
}
printf("\n");
}
图片说明

其他学号有些可以查到,有些查不到,是代码位置不对吗?

  • 写回答

1条回答 默认 最新

  • threenewbee 2017-05-05 15:53
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭
  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示