数据结构与算法 ~ 查找 ~ 二分查找
/*search---binsearch*/
#include<stdio.h>
#include<stdlib.h>
void binsearch(int *list,int len,int e){
int i,low,high,mid;
low=1;
high=len;
printf("\n===二分查找过程===\n");
while(low<=high){
mid=(low+high)/2;
if(e==list[mid]){
Print(list,mid,mid,mid,len);
printf("\n查找的数值位置是:%d",mid);
break;
}else {
if (e<list[mid])
high=mid-1;
else
low=mid+1;
}
Print(list,low,high,mid,len);
}/*while*/
if (low>high)
printf("\n查找的数值没有找到.");
}/*binsearch*/
int Print(int *list,int low,int high,int mid,int len){
int i;
printf("\n");
for(i=1;i<=len;++i){
if (i==low)
printf("[");
if (i==mid)
printf("(");
printf("%4d",list[i]);
if (i==mid)
printf(")");
if (i==high)
printf(" ] ");
}/*for*/
}
int main( ){
int list[20];
int len,key,e;
int node,i=1;
list[0]=0;
printf ("\n请输入数值 (Exit for 0):");
scanf("%d,",&node);
while(node!=0&&i<20){
list[i++]=node;
printf ("\n请输入数值 (Exit for 0):");
scanf("%d,",&node);
}/*while*/
len=i-1;
printf ("\n初始序列为 :");
for (i=1;i<=len;++i)
printf(" %3d,",list[i]);
printf(" \nlen=%d",len);
printf ("\n请输入你想查找的数值(Exit for 0):\n");
scanf("%d",&key);
while(key!=0)
{ binsearch(list,len,key);
printf ("\n请输入你想查找的数值(Exit for 0):\n");
scanf("%d",&key);
}/*while*/
system("pause");
exit(0);
}/*main*/
运行结果是:
请输入数值 (Exit for 0):5
请输入数值 (Exit for 0):13
请输入数值 (Exit for 0):19
请输入数值 (Exit for 0):21
请输入数值 (Exit for 0):37
请输入数值 (Exit for 0):56
请输入数值 (Exit for 0):64
请输入数值 (Exit for 0):75
请输入数值 (Exit for 0):80
请输入数值 (Exit for 0):88
请输入数值 (Exit for 0):92
请输入数值 (Exit for 0):0
初始序列为 : 5, 13, 19, 21, 37, 56, 64, 75, 80, 88, 92,
len=11
请输入你想查找的数值(Exit for 0):
13
===二分查找过程===
[ 5 13 19 21 37 ] ( 56) 64 75 80 88 92
[ 5 13 ] ( 19) 21 37 56 64 75 80 88 92
( 5)[ 13 ] 19 21 37 56 64 75 80 88 92
5[( 13) ] 19 21 37 56 64 75 80 88 92
查找的数值位置是:2
请输入你想查找的数值(Exit for 0):
80
===二分查找过程===
5 13 19 21 37( 56)[ 64 75 80 88 92 ]
5 13 19 21 37 56 64 75[( 80) ] 88 92
查找的数值位置是:9
请输入你想查找的数值(Exit for 0):
81
===二分查找过程===
5 13 19 21 37( 56)[ 64 75 80 88 92 ]
5 13 19 21 37 56 64 75( 80)[ 88 92 ]
5 13 19 21 37 56 64 75 80 ] [( 88) 92
查找的数值没有找到.
请输入你想查找的数值(Exit for 0):