折半查找

来源:互联网 发布:c datetime 数据比较 编辑:程序博客网 时间:2024/06/18 08:09

本程序在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

0 0
原创粉丝点击