| 网站首页 | 业界新闻 | 小组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 592 人关注过本帖
标题:请用折半查找法查找学生的学号。第一行n代表学生个数,接下来n行,每行按顺序 ...
只看楼主 加入收藏
LL1023
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-12-18
  问题点数:0  回复次数:3   
请用折半查找法查找学生的学号。第一行n代表学生个数,接下来n行,每行按顺序输入一个学号,接下来m代表要查找的学号的个数,接下来m行,每行输入一个学号。
#include<stdio.h>
#define N 35
void PaiXu(int a[],int n);
int main ()
{
    int ids[N],ckids[N];
    int i=0,mid,min,max,n,m,k=0;
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%d",&ids[i]);
    }
    PaiXu(ids,n);
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        scanf("%d",&ckids[i]);
    }
    min=0;
    max=n-1;
    mid=n/2;
    for(i=0;i<m;i++)
    {
        printf("%d ",mid);
        while(max!=min+1)
        {
            if(ckids[i]==ids[mid])
            {
                printf("%d\n",mid);
                min=mid;
                mid=(min+max)/2;
                k=1;
            }
            else if(ckids[i]>ids[mid])
            {
                min=mid;
                mid=(min+max)/2;
                if(min+1!=max)
                {
                        printf("%d ",mid);
                }
            
            }
            else
            {
                max=mid;
                mid=(max+min)/2;
                if(min+1!=max)
                {
                    printf("%d ",mid);
                }
               
            }
               
        }
        if(k==0)
        {
            printf("查无此号\n");
        }
        k=0;
        max=n-1;
        min=0;
        mid=n/2;
    }
    return 0;
}

void PaiXu(int a[],int n)
{
    int i,j,t;
    for(i=0;i<n;i++)
    {
        for(j=0;j<n-1-i;j++)
        {
            if(a[j]>a[j+1])
            {
                t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
        }
    }
}
搜索更多相关主题的帖子: 学号 int mid min max 
2018-12-18 17:58
LL1023
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-12-18
  得分:0 
输出是:m行。
每行请输出折半查找的mid值。若找到请再输出数组下标,若找不到请再输出“查无此号”
2018-12-18 18:00
LL1023
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-12-18
  得分:0 
跪求大佬,解答,不知哪里错了
2018-12-18 18:01
LL1023
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2018-12-18
  得分:0 
这是例子
输入:
5
2018110002
2018110004
2018110006
2018110008
2018110010
2
2018110008
2018110007
输出:
2 3 3
2 3 查无此号
帮帮忙,谢谢
2018-12-18 18:04
快速回复:请用折半查找法查找学生的学号。第一行n代表学生个数,接下来n行,每行 ...
数据加载中...
 
   



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

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