代码如下:
#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");
}