4 折半查找 (10分)- 太简单

成绩10开启时间2018年11月20日 星期二 18:00
折扣0.8折扣时间2018年12月10日 星期一 23:55
允许迟交关闭时间2018年12月20日 星期四 23:55

折半查找的查找过程:先确定待查记录所在的范围(区间),然后逐步缩小范围直到找到或找不到该记录为止。

每条待查记录包含关键字项和其他项,如关键字项为15,其他项为该记录在查找表里的原序号4。

对无序表的查找,还需要事先排列成有序表,再进行折半查找。

输入:

5 (记录的条数)

各记录项:如 32 1

输出:

已按关键字排列好的非递减序列:如 (16 2)(20 5)(32 1)(35 3)(91 4)

找不到时输出: error

 测试输入关于“测试输入”的帮助期待的输出关于“期待的输出”的帮助时间限制关于“时间限制”的帮助内存限制关于“内存限制”的帮助额外进程关于“{$a} 个额外进程”的帮助
测试用例 1以文本方式显示
  1. 11↵
  2. 5 1↵
  3. 13 2↵
  4. 19 3↵
  5. 21 4↵
  6. 37 5↵
  7. 56 6↵
  8. 64 7↵
  9. 75 8↵
  10. 80 9↵
  11. 88 10↵
  12. 92 11↵
  13. 56↵
以文本方式显示
  1. (5 1)(13 2)(19 3)(21 4)(37 5)(56 6)(64 7)(75 8)(80 9)(88 10)(92 11)↵
  2. (56 6)↵
1秒64M0
测试用例 3以文本方式显示
  1. 10↵
  2. 5 3↵
  3. 20 4↵
  4. 100 5↵
  5. 75 6↵
  6. 63 7↵
  7. 19 8↵
  8. 18 9↵
  9. 23 10↵
  10. 32 11↵
  11. 35 12↵
  12. 36↵
以文本方式显示
  1. (5 3)(18 9)(19 8)(20 4)(23 10)(32 11)(35 12)(63 7)(75 6)(100 5)↵
  2. error↵
1秒64M

0

 

 

#include <stdio.h>
#include <stdlib.h>
typedef struct node{
        int x;
        int y;
}NODE;

int BubbleSort(NODE *list, int n)
{
        int i,j,change;
        for (i = 1; i <= n; i++)
                for (j=i;j<=n;j++){
                        if (list[j].x<list[i].x)
                        {
                                change = list[i].x;
                                list[i].x = list[j].x;
                                list[j].x = change;
                                change = list[i].y;
                                list[i].y = list[j].y;
                                list[j].y = change;
                        }
                }
        return 1;
}

void Print(struct node *list,int n)
{
        int i;
        for (i=1;i<n;i++)
        {
                printf("(%d %d)",list[i].x,list[i].y);
        }
        printf("(%d %d)\n",list[n].x,list[n].y);
}

int Search(NODE *list, int n)
{
        int head = 1 , tail = n , mid = (1 + n) / 2;
        while(head  <= tail)
        {
                if (list[0].x == list[mid].x)
                {
                        printf("(%d %d)\n",list[mid].x,list[mid].y);
                        return 1;
                }
                else if(list[0].x < list[mid].x)
                {
                        tail = mid - 1;
                        mid = (head + tail) /2;
                        continue;
                }
                else
                {
                        head = mid + 1;
                        mid = (head + tail) /2;
                        continue;
                }
        }
        return 0;
}
int main(){
        int i,n,result;
        NODE list[200];
        scanf("%d",&n);
        for(i=1;i<=n;i++)
                scanf("%d %d",&list[i].x,&list[i].y);

        scanf("%d",&list[0].x);    
        list[0].y = -1;

        if(BubbleSort(list,n))
                Print(list, n); 
                  
        if(!Search(list, n))
                printf("error\n");

        return 0;
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值