C語言 折半查找,順序查找(結構體類型)

結果:
在這裏插入圖片描述

#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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章