結果:
#include <stdio.h>
#include <stdlib.h>
typedef struct scoreTable{
int id;
char name[30];
int politics ;
int chinese ;
int foreignLanguages ;
int math ;
int physics ;
int chemistry ;
int Biology ;
int total_score ;
}scoreTable;
typedef struct Data{
scoreTable * elem ;
int length ;
}Data;
void CreateData(Data * L , int len , scoreTable *data)
{
L->elem = malloc(sizeof(scoreTable)* len) ;
L->length = len ;
L->elem = data ;
}
void Print(Data L)
{
int i ;
printf("%-10s\t%-10s\t%-10s\t%-10s\t%-10s\n" , "准考證號" , "姓名" , "政治" , "語文", "總分");
for(i = 0 ; i < L.length ; i++)
{
L.elem[i].total_score = L.elem[i].politics + L.elem[i].chinese + L.elem[i].foreignLanguages + L.elem[i].math
+ L.elem[i].physics + L.elem[i].chemistry + L.elem[i].Biology ;
printf("%-10d\t%-10s\t%-10d\t%-10d\t%-10d\n" , L.elem[i].id , L.elem[i].name , L.elem[i].politics , L.elem[i].chinese , L.elem[i].total_score);
}
}
int Find(Data L ,int id)
{
int flag = 0 ;
int i ;
for( i= 0 ; i < L.length ; i++)
{
if(id == L.elem[i].id)
{
flag = 1 ;
break ;
}
}
return flag ;
}
Data sortss(Data L)
{
int i , j;
scoreTable p ;
for(i = 0 ; i < L.length -1; i++ )
{
for(j = 0 ; j < L.length-i-1 ; j++)
{
if(L.elem[j].id > L.elem[j+1].id)
{
p = L.elem[j];
L.elem[j] = L.elem[j+1];
L.elem[j+1] = p ;
}
}
}
return L ;
}
int HalveFind(Data R , int id)
{
Data L = sortss(R) ;
int low = 0 , high = L.length-1 , mid ;
while(low <= high)
{
mid = low + (high-low) /2 ;
if(L.elem[mid].id < id)
low = mid + 1 ;
else if(L.elem[mid].id > id)
high = mid - 1 ;
else
return mid ;
}
return -1 ;
}
int main()
{
Data root ;
scoreTable data[] = {
{179328 , "何芳芳" , 85 , 89 , 98 , 100 , 93 , 80 , 47},
{179325 , "陳紅" , 85 , 86 , 88 , 100 , 92 ,90 , 45},
{179326 , "陸華" , 78 , 75 , 90 , 80 , 95 , 88 , 37},
{179327 , "張平" , 82 , 80 , 78 , 98 , 84 , 96 , 40},
{179324 , "趙小怡" , 76 , 85 , 94 , 57 , 77 , 69 , 44}
};
CreateData(&root , 5 , data) ;
Print(root);
printf("順序查找 179328 ---%s\n" , Find(root , 179328)?"查找成功":"查找不成功");
printf("折半查找 179328 ---%s\n" , HalveFind(root , 179328)!=-1?"查找成功":"查找不成功");
return 0;
}