| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 524 人关注过本帖
标题:求大神指教在这个程序中如何实现折半查找
只看楼主 加入收藏
业余爱好者
Rank: 2
等 级:论坛游民
帖 子:28
专家分:23
注 册:2013-4-23
结帖率:80%
收藏
已结贴  问题点数:20 回复次数:1 
求大神指教在这个程序中如何实现折半查找
#include<stdio.h>
#include<malloc.h>

 typedef struct student
{
    int age;
    char name[10];
    float score;
}Stu;

 Stu scanfbanji(Stu *,int);
 void printfxinxi(Stu * pArr,int);
 void sort(Stu * pArr, int len);


int  main()
{
    int len;
    int n;
    Stu * pArr;
    printf("请输入学生的的个数:");
    scanf("%d",&len);
    pArr = (Stu *)malloc(sizeof(Stu) * len);
   
    * pArr =  scanfbanji( pArr,len);
    printfxinxi( pArr,len);
   
   
    printf("按分数从大到小的顺序为\n:");
    sort(pArr,  len);


    printfxinxi( pArr,len);
   




    return 0;
}

Stu scanfbanji(Stu* pArr,int len)
{
    for(int i = 0;i<len; i ++)
    {
        printf("请输入第%d个学生的信息\n",i+1);
        printf("age=");
        scanf("%d",&pArr[i].age );
        printf("name=");
        scanf("%s",pArr[i].name );
        printf("score=");
        scanf("%f",&pArr[i].score );
    }
   
    return * pArr;
}

void printfxinxi(Stu * pArr, int len)
{
    for(int i = 0;i<len; i ++)
    {
        printf("第%d的学生的信息是:",i+1);
        printf("年龄:%d  ",pArr[i].age);
        printf("名字:%s  ",pArr[i].name );
        printf("分数:%f  ",pArr[i].score );
        printf("\n");
    }
}

void sort(Stu * pArr, int len)
{
     for(int i=0;i<len-1;i++)
     {
         for(int j=0;j<len-1-i;j++)
         {
             if(pArr[j].score<pArr[j+1].score )
             {
                 Stu  t;
                 t = pArr[j];
                 pArr[j] = pArr[j+1];
                 pArr[j+1] = t;

             }
         }
     }
}
搜索更多相关主题的帖子: 如何 include 
2013-06-06 08:53
lzj12530
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:2
帖 子:264
专家分:841
注 册:2013-3-28
收藏
得分:20 
stu * serch(stu * pArr,int keyscore,int len)
{
    int i=len/2;
    stu *temp;
    if(pArr[0].score<keyscore&&pArr[len-1].score>keyscore)
   {
     while(pArr[i].score!=keyscore&&i>0&&i<len-1)
    {
        temp=&pArr[i];
        if(temp->score<keyscore)
            i+=i/2;
        if(temp->score>keyscore)
            i-=i/2;
        else
            return temp;
    }
    }
    if(pArr[0].score==keyscore)
        return pArr[0];
    if(pArr[len-1].score==keyscore)
        return pArr[len-1];
    else
        return NULL;
}
合适嘛,前提是已经排序过

[ 本帖最后由 lzj12530 于 2013-6-6 13:38 编辑 ]

C++菜鸟
2013-06-06 13:25
快速回复:求大神指教在这个程序中如何实现折半查找
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016812 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved