实验5 查找算法实验目的1) 掌握有序表、无序表查找的基本思想及存储、运算的实现2) 深刻理解多个算法的特点,并加以灵活应用3)加深对查找的理解,逐步培养解决实际问题的编程能力实验环境1) 硬件:每个学生需配备计算机一台,操作系统:Windows/XP。;2) 软件:visual c++6.0。实验学时3 学时实验内容1)建立一种无序表并实现其上的次序查找;2)建立一种有序表并实现其上的折半查找(用递归和非递归两种算法实现);实验代码简朴排序查找:/* Note:Your choice is C IDE */#include "stdio.h"void main(){ int i,a[10],n=1,b,h; printf("请输入10个数字,*号结束:\n"); for(i=0;i<=9;i++) { printf("请输入序号是%d的数字:",i); scanf("%d",&a[i]); } printf("请输入要查找的数字值:"); scanf("%d",&b); for(i=0;i<10;i++) { if(a[i]==b) { h=i;break;} if(i==9) h=-1;} if(h==-1) { printf("\n此数字不在该数组中");} else printf("该数字的位置在数组序号%d",h);}非递归查找:#includeint eff(int c,int yxb[]){int mid,a=0,b=9;while((b-a)>1){mid=(a+b)/2;if(yxb[mid]==c) { return mid; break;}else if(c>yxb[mid]) {a=mid+1;}else {b=mid-1;}}if((b-a)==1){if(yxb[a]==c) { return a;}else if(yxb[b]==c) { return b;}else return -1;}}void main(){ int yxb[10]={1,2,6,12,21,22,32,36,40,46}; int c,i,mm; for(i=0;i<=9;i++) { printf("序号%d的值:%d\n",i,yxb[i]);} printf("\nplease input yxb!:"); scanf("%d",&c); mm=eff(c,yxb); printf("the zhi %d locat in:%d\n\n",c,mm);}运行成果:递归函数:#includeint a=0,b=9,A,B;int mid,i;int eff(int c,int yxb[]){mid=(a+b)/2;if(yxb[mid]==c) { return mid;}else if(c>yxb[mid]) { a=mid+1;}else b=mid-1;A=b-a;if(A>1){ eff(c,yxb);}else {if(yxb[a]==c) { return a;}else if(yxb[b]==c) { return b;}else return -1;}}void main(){ int yxb[10]={1,2,6,12,21,22,32,36,40,46}; int c,i,mm; for(i=0;i<=9;i++) { printf("序号%d 的值:%d\n",i,yxb[i]);} printf("\nplease input yxb!:"); scanf("%d",&c); mm=eff(c,yxb); printf("the zhi %d locat in:%d\n\n",c,mm);}运行成果:实验总结:通过本次实验,我学会了如何去设计一种函数去更快的查找一种数,方便数据的解决。