成绩 | 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
测试输入 | 期待的输出 | 时间限制 | 内存限制 | 额外进程 | |
---|---|---|---|---|---|
测试用例 1 | 以文本方式显示
| 以文本方式显示
| 1秒 | 64M | 0 |
测试用例 3 | 以文本方式显示
| 以文本方式显示
| 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;
}