本程序在VC环境下运行。折半查找需待查找的序列是有序的。
binsearch.h文件。
#include<stdio.h>
#include<stdlib.h>
#define RECORDSIZE 20
typedef int keyType;
typedef int otherType;
typedef struct{
keyType key;
otherType otherdata;
}Record;
typedef struct{
Record record[RECORDSIZE];
int length;
}RecordList;
binsearch.cpp文件。
#include "binsearch.h"
//折半查找
int binsearch(RecordList L,int data){
int low,mid,high;
low=1;
high=L.length;
while(low<=high){
mid=(low+high)/2;
if(L.record[mid].key<data){
low=mid+1;
}else if(L.record[mid].key>data){
high=mid-1;
}else{
return mid;
}
}
return 0;
}
//创建记录表
void CreateList(RecordList *L){
int i;
int data;
int length;
printf("请输入记录表的长度:");
scanf("%d",&length);
L->length=length;
printf("\n");
for(i=1;i<=length;i++){
printf("请输入第%d个记录的数值:",i);
scanf("%d",&data);
L->record[i].key=data;
}
}
void main(){
RecordList L;
int i;
int data,pos;
CreateList(&L);
printf("\n");
printf("记录表中的所有数据是:");
for(i=1;i<=L.length;i++){
printf("%d\t",L.record[i].key);
}
printf("\n");
printf("请输入要查找的记录的数值是:");
scanf("%d",&data);
printf("\n");
pos=binsearch(L,data);
if(pos){
printf("查找的记录的数值在记录表的位置是:%d",pos);
}else{
printf("没有你要找的数值记录。");
}
printf("\n");
}
运行结果如下:
请输入记录表的长度:6
请输入第1个记录的数值:12
请输入第2个记录的数值:23
请输入第3个记录的数值:34
请输入第4个记录的数值:45
请输入第5个记录的数值:56
请输入第6个记录的数值:67
记录表中的所有数据是:12 23 34 45 56 67
请输入要查找的记录的数值是:34
查找的记录的数值在记录表的位置是:3
Press any key to continue