计算机软件基础太原科技大学实验四.docx
- 文档编号:25627044
- 上传时间:2023-06-10
- 格式:DOCX
- 页数:10
- 大小:238.29KB
计算机软件基础太原科技大学实验四.docx
《计算机软件基础太原科技大学实验四.docx》由会员分享,可在线阅读,更多相关《计算机软件基础太原科技大学实验四.docx(10页珍藏版)》请在冰豆网上搜索。
计算机软件基础太原科技大学实验四
《软件开发技术基础》
实验报告
学院:
电子信息工程学院__
班级:
电子131502____
学号:
姓名:
实验四查找算法的实现(2学时)
班级电子131502学号201315020232姓名许鹏
第13周星期五第3、4节成绩_____
实验类型:
验证性
实验要求:
必修
实验学时:
2学时
一、实验目的:
了解静态查找和动态查找的各种方法,熟悉并掌握顺序查找和二分查找的基本思想和算法步骤。
二、实验要求:
1、阅读程序,给出详细注解;
2、运行程序,分析程序结果;
3、改写程序并且实现。
三、实验内容:
首先给出一组初始数值序列,然后给出待查的关键字数值,
1、用顺序查询查找,查找到关键字后删除关键字,然后输出数值序列,若未查找到关键字,则将关键字插入到原序列的最后,并输出。
2、使用二分查找法查找,把初始的无序序列变成有序的,查找到关键字后删除关键字,然后输出序列,若未查找到关键字,则将关键字插入到原序列的最后,并输出。
3、用二分查找法查找(选择排序),把初始的无序序列变成有序的,查找关键字是否存在。
四、实验原理:
顺序查询是从第一个元素开始,逐个把元素的关键字与给定值进行比较,若两者相等,则查找成功,否则说明不存在满足条件的数据元素,查找失败。
二分查找是在有序的序列中,先将查找的数值与序列中间的元素进行比较,若相等,则查找成功,若数值大于中间的元素,则在序列的后半部继续进行二分查找,否则在前半部进行二分查找。
所以在使用二分查找时要先将序列进行排序,可以选择冒泡排序法和选择排序法。
冒泡排序:
比较相邻的元素。
如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。
在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个。
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
选择排序:
第1趟,在待排序记录r~r[n]中选出最小的记录,将它与r交换;第2趟,在待排序记录r~r[n]中选出最小的记录,将它与r交换;以此类推,第i趟在待排序记录r[i]~r[n]中选出最小的记录,将它与r[i]交换,使有序序列不断增长直到全部排序完毕。
五、程序代码:
#include
#defineLENGTH20
intSequenceSearch(int*fp,intLength);
intSearch(int*fp,intlength);
voidSort(int*fp,intlength);
intselectsort(int*fp,intn);
voidmain()
{staticintcount,a,i,j,n,m=0,b=0;
intarr[LENGTH];
printf("请输入你的数据的个数:
\n");
scanf_s("%d",&count);
printf("请输入%d个数\n",count);
for(inti=0;i {scanf_s("%d",&arr[i]);} intchoise=0; do {printf("1.使用顺序查询.\n2.使用二分查找法查找.\n3.使用二分查找法查找(选择排序).\n4.退出\n"); scanf_s("%d",&choise); if(choise==1) {a=SequenceSearch(arr,count); for(i=0;i {n=i+1; if(arr[i]==a) {n=n+LENGTH; for(j=i+1;j arr[i++]=arr[j]; arr[j]='\0'; printf("删除所查到数据后的序列为: "); for(i=0;i printf("%3d",arr[i]); m=i-1;b=count; printf("\n");count=count-1; }} if((n<=count)&&(m! =b-1)) {count=count+1; arr[count-1]=a; printf("插入原序列不存在数据后的序列为: "); for(i=0;i printf("%3d",arr[i]); printf("\n"); } } elseif(choise==2) {a=Search(arr,count); for(i=0;i {n=i+1; if(arr[i]==a) {n=n+LENGTH; for(j=i+1;j arr[i++]=arr[j]; arr[j]='\0'; printf("删除所查到数据后的序列为: "); for(i=0;i printf("%3d",arr[i]); m=i-1;b=count; printf("\n");count=count-1; }} if((n<=count)&&(m! =b-1)) {count=count+1; arr[count-1]=a; printf("插入原序列不存在数据后的序列为: "); for(i=0;i printf("%3d",arr[i]); printf("\n"); } } elseif(choise==3) selectsort(arr,count); elseif(choise==4)break; } while(choise==1||choise==2||choise==3); } intSequenceSearch(int*fp,intLength) {intdata,i; printf("开始使用顺序查询.\n请输入你想要查找的数据.\n"); scanf_s("%d",&data); for(i=0;i if(fp[i]==data) {printf("经过%d次查找,查找到数据%d.\n",i+1,data); returndata; } {printf("经过%d次查找,未能查找到数据%d.\n",i,data); returndata;} } intSearch(int*fp,intlength) {intdata; printf("开始使用二分法查询.\n请输入你想要查找到数据.\n"); scanf_s("%d",&data); printf("由于二分查找法要求数据是有序的,现在开始为数组排序.\n"); Sort(fp,length); printf("数组现在已经是从小到大排列,下面将开始查找.\n"); intbottom,top,middle; bottom=0; top=length; inti=0; while(bottom<=top) {middle=(bottom+top)/2; i++; if(fp[middle] {bottom=middle+1;} elseif(fp[middle]>data) {top=middle-1;} else{printf("经过%d次查找,查找到数据%d.\n",i,data); returndata;} }printf("经过%d次查找,未能查找到数据%d.\n",i,data); returndata;} voidSort(int*fp,intlength) {printf("现在开始为数组排序,排列结果将是从小到大.\n"); inttemp; for(inti=0;i for(intj=0;j if(fp[j]>fp[j+1]) {temp=fp[j]; fp[j]=fp[j+1]; fp[j+1]=temp; } printf("排序完成! \n下面输出排序后的数组: \n"); for(intk=0;k {printf("%5d",fp[k]);} printf("\n"); } intselectsort(int*fp,intn) {intdata; printf("开始使用二分法查询.\n请输入你想要查找到数据.\n"); scanf_s("%d",&data); printf("由于二分查找法要求数据是有序的,现在开始为数组排序.\n"); intmin,i,j,temp,k; for(i=0;i {min=i; for(j=i+1;j {if(fp[min]>fp[j]) min=j; } if(min! =i) {temp=fp[i]; fp[i]=fp[min]; fp[min]=temp; } } printf("选择后的排序为: \n"); for(k=0;k printf("%3d",fp[k]); printf("\n"); printf("数组现在已经是从小到大排列,下面将开始查找.\n"); intbottom,top,middle; bottom=0; top=n; intm=0; while(bottom<=top) {middle=(bottom+top)/2; m++; if(fp[middle] {bottom=middle+1;} elseif(fp[middle]>data) {top=middle-1;} else{printf("经过%d次查找,查找到数据%d.\n",m,data); returndata;} }printf("经过%d次查找,未能查找到数据%d.\n",m,data); returndata;} 六、实验结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件 基础 太原 科技大学 实验