实验8、9查找、排序算法的应用姓名张鑫明学号20144015A208班级B14512一、实验目的1.掌握查找的不同方法,并能用高级语言实现查找算法。2.熟练掌握顺序表和有序表的顺序查找和二分查找方法。3.掌握排序的不同方法,并能用高级语言实现排序算法。4.熟练掌握顺序表的选择排序、冒泡排序和直接插入排序算法的实现。二、实验内容1.在文件中存储如下学生信息:学号姓名数据结构程序设计1王立76882张秋88773刘丽79654王通86855赵阳71906李艳68707钱娜89958孙胜60762.创建顺序查找表,读取文件中的信息。3.使用顺序查找方法按姓名查找学生。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。4.使用二分查找方法,查找学生学号信息。如果查找成功,则显示该生的相关信息;如果查找不成功,则给出相应的提示信息。5.使用直接插入排序方法,对学生信息中的姓名进行排序。输出排序前和排序后的学生信息表,验证排序结果。6.使用直接选择排序方法,对学生信息中的数据结构成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。7.使用冒泡排序方法,对学生信息中的程序设计成绩进行排序。输出排序前和排序后的学生信息表,验证排序结果。8.编写一个菜单,来实现各项功能的选择。*******************学生成绩管理系统******************1.信息初始化2.顺序查找**3.二分查找4.直接插入排序**5.冒泡排序6.直接选择排序**0.退出*****************************************************9.利用工程完成本次实验任务,各个功能分别放到一个函数中。三、实验结果Main()#includesdaf.hintmain(intargc,char*argv[]){stua[8]={{1,王立,76,88},{2,张秋,88,77},{3,刘丽,79,65},{4,王通,86,85},{5,赵阳,71,90},{6,李艳,68,70},{7,钱娜,89,95},{8,孙胜,60,76}};FILE*pf=NULL;pf=fopen(D://test.txt,w);//假设test.txt文件为空if(!pf){printf(打开文件失败,程序退出!);exit(1);}for(inti=0;i8;i++)fprintf(pf,%d%s%d%d\n,a[i].num,a[i].name,a[i].s1,a[i].s2);if(pf)//关闭文件{fclose(pf);pf=NULL;printf(数据已写入test.txt文件!\n);}stub[8];pf=fopen(D://test.txt,r);//打开文件,按读的方式打开for(intj=0;j8;j++)fscanf(pf,%d%s%d%d,&b[j].num,&b[j].name,&b[j].s1,&b[j].s2);//循环读if(b[7].num==8)cout读取成功endl;cout*******************学生成绩管理系统*****************endl;cout*1.信息初始化2.顺序查找*endl;cout*3.二分查找4.直接插入排序*endl;cout*5.冒泡排序6.直接选择排序*endl;cout*0.退出*endl;cout****************************************************endl;intcc;while(cc!=0){cout请输入您要选择的数字endl;cincc;while(cc6||cc0){cout输入错误请重新输入endl;cincc;}switch(cc){case1:{cout初始化成功endl;break;}case2:{cout请输入查找的姓名endl;charaa[5];cinaa;S_search(b,aa);break;}case3:{cout请输入要查找的数字endl;intbb;cinbb;binary_search(b,bb);break;}case4:{cout按姓名排序endl;straisort(b);break;}case5:{cout按程序设计分数排序endl;bubblesort(b);break;}case6:{cout按数据结构分数排序endl;selectsort(b);break;}case0:{break;}}system(pause);}return0;}.cpp#includesdaf.hintS_search(stuc[],charName[])//顺序查找{for(inti=0;i8;i++){if(stricmp(Name,c[i].name)==0){coutc[i].numc[i].namec[i].s1c[i].s2endl;return0;}}if(i==8)cout查无此人endl;return0;}intbinary_search(stuc[],intNum)//二分{intlow=0;inthigh=8-1;while(low=high){intmiddle=(low+high)/2;if(c[middle].num==Num){coutc[middle].numc[middle].namec[middle].s1c[middle].s2endl;return0;}//在左半边elseif(c[middle].numNum)high=middle-1;//在右半边elselow=middle+1;}coutnofindendl;return-1;}intstraisort(stur[])//直接插入排序{stua;inti,j;for(i=1;i8;i++)if(stricmp(r[i].name,r[i-1].name)0){a=r[i];for(j=i-1;stricmp(a.name,r[j].name)0;j--){if(j==-1)break;r[j+1]=r[j];}r[j+1]=a;//插入到正确位置}for(intk=0;k8;k++)//输出排序的结果{coutr[k].numr[k].namer[k].s1r[k].s2endl;}return0;}voidselectsort(stuL[])//直接选择排序{intk;stutemp;for(inti=0;i=7;i++){k=i;for(intj=i+1;j8;j++){if(L[j].s1L[k].s1)k=j;}if(k!=i){temp=L[i];L[i]=L[k];L[k]=temp;}}for(intk1=0;k18;k1++)//输出排序的结果{coutL[k1].numL[k1].nameL[k1].s1L[k1].s2endl;}}voidbubblesort(stuL[])//冒泡排序{inti,j,flag=1;stuw;for(i=0;i=7&&(flag);i++){flag=0;for(j=7;j=i+1;j--)if(L[j].s2L[j-1].s2){w=L[j];L[j]=L[j-1];L[j-1]=w;flag=1;}}for(intk1=0;k18;k1++)//输出排序的结果{coutL[k1].numL[k1].nameL[k1].s1L[k1].s2endl;}}.h#includeiostreamusingnamespacestd;#includestdio.htypedefstructstudent{intnum;charname[9];ints1,s2;}stu;intS_search(stua[],charb[]);intbinary_search(stua[],intb);intstraisort(stua[]);voidselectsort(stua[]);voidbubblesort(stua[]);四、实验总结复习了文件的建立与使用,温习了数据存储的要点,明白了for循环的条件的一些细节,不能无限循环,将所学的查找排序运用熟练。