数据结构与算法 ~ 查找 ~ 二分查找

数据结构与算法 ~ 查找 ~ 二分查找

/*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):

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值