查找排序?qū)嶒?yàn)報(bào)告_第1頁
查找排序?qū)嶒?yàn)報(bào)告_第2頁
查找排序?qū)嶒?yàn)報(bào)告_第3頁
查找排序?qū)嶒?yàn)報(bào)告_第4頁
查找排序?qū)嶒?yàn)報(bào)告_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

查找、排序?qū)嶒?yàn)班級(jí)學(xué)號(hào)姓名一、實(shí)驗(yàn)?zāi)康?掌握不同的查找和排序方法,并能用高級(jí)語言實(shí)現(xiàn)相應(yīng)算法。2熟練掌握順序查找和二分查找方法。3熟練掌握直接插入排序、選擇排序、冒泡排序、快速排序。二、實(shí)驗(yàn)內(nèi)容1創(chuàng)建給定的靜態(tài)查找表。表中共包含十條學(xué)生信息,信息如下:學(xué)號(hào)姓名班級(jí)C++數(shù)據(jù)結(jié)構(gòu)1王立0351185762張秋0351178883劉麗0351190794王通0351175865趙陽0351160716李艷0351158687錢娜0351195898孫勝0351145602使用順序查找方法,從查找表中查找姓名為趙陽和王夏的學(xué)生。如果查找成功,則顯示該生的相關(guān)信息;如果查找不成功,則給出相應(yīng)的提示信息。3使用快速排序方法,對(duì)學(xué)生信息中的學(xué)號(hào)進(jìn)行排序,然后使用二分查找方法,從查找表中查找學(xué)號(hào)為7和12的學(xué)生。如果查找成功,則顯示該生的相關(guān)信息;如果查找不成功,則給出相應(yīng)的提示信息。4使用直接插入排序方法,對(duì)學(xué)生信息中的姓名進(jìn)行排序。輸出排序前和排序后的學(xué)生信息表,驗(yàn)證排序結(jié)果。5使用選擇排序方法,對(duì)學(xué)生信息中的C成績進(jìn)行排序。輸出排序前和排序后的學(xué)生信息表,驗(yàn)證排序結(jié)果。6使用冒泡排序方法,對(duì)學(xué)生信息中的數(shù)據(jù)結(jié)構(gòu)成績進(jìn)行排序。輸出排序前和排序后的學(xué)生信息表,驗(yàn)證排序結(jié)果。7編寫一個(gè)主函數(shù),將上面函數(shù)連在一起,構(gòu)成一個(gè)完整程序。8調(diào)試實(shí)驗(yàn)源程序并運(yùn)行。三、實(shí)驗(yàn)結(jié)果源程序代碼:#include<iostream>usingnamespacestd;#include<string>#include<iomanip>#defineM100typedefstringKeytype;typedefstruct{KeytypeclassNum;Keytypename;intstudentNum;intC;intstructure;}Student;typedefstruct{ Students[M]; intlength;}s_t;intcreat(s_t*t,intNum){ inti; t->length=Num; for(i=1;i<=t->length;i++) { cout<<"請(qǐng)輸入第"<<i<<"個(gè)學(xué)生的信息(學(xué)號(hào),姓名,班級(jí),C++,數(shù)據(jù)結(jié)構(gòu)):"<<endl; cin>>t->s[i].studentNum>>t->s[i].name>>t->s[i].classNum>>t->s[i].C>>t->s[i].structure; } return0;}intprint(s_t*t){ inti; cout<<""<<"學(xué)號(hào)"<<""<<"姓名"<<""<<"班級(jí)"<<""<<"C++成績"<<""<<"數(shù)據(jù)結(jié)構(gòu)"<<""<<endl; for(i=1;i<=t->length;i++) {cout<<""<<t->s[i].studentNum<<""<<t->s[i].name<<""<<t->s[i].classNum<<""<<t->s[i].C<<""<<t->s[i].structure<<""<<endl; }return0;}intS_Search(s_t*t,Keytypekx){inti; t->s[0].name=kx; for(i=t->length;i>=0;i--) if(t->s[i].name==kx) returni;}voidInserSort(s_t*t){inti; for(i=2;i<=t->length;i++) if(t->s[i].name<t->s[i-1].name) {t->s[0]=t->s[i]; for(intj=i-1;t->s[0].name<t->s[j].name;j--)t->s[j+1]=t->s[j];t->s[j+1]=t->s[0]; }}intSelect_Sort(s_t*t){ inti,j,k; for(i=0;i<t->length;i++) { k=i;for(j=i+1;j<=t->length;j++) if(t->s[k].C>t->s[j].C) k=j; if(i!=k) {t->s[0]=t->s[k]; t->s[k]=t->s[i]; t->s[i]=t->s[0]; } } return0;}intHalf_Sort(s_t*t,intnum){ intflag=0; intlow,high,mid; low=1;high=t->length;while(low<=high) { mid=(low+high)/2; if(t->s[mid].studentNum>num) high=mid-1;elseif(t->s[mid].studentNum<num) low=mid+1; else {flag=mid;break; }} returnflag;}intBu_Sort(s_t*t){ inti,j,swap;for(i=1;i<t->length;i++) { swap=0;for(j=1;j<=t->length-i;j++) if(t->s[j].structure>t->s[j+1].structure) { t->s[0]=t->s[j]; t->s[j]=t->s[j+1]; t->s[j+1]=t->s[0]; swap=1; } if(swap==0) break; } return0;}intPartition(s_t*t,inti,intj){t->s[0]=t->s[i];while(i<j){while(i<j&&t->s[j].studentNum>=t->s[0].studentNum) j--; if(i<j) { t->s[i]=t->s[j]; i++; } while(i<j&&t->s[i].studentNum<t->s[0].studentNum) i++; if(i<j) { t->s[j]=t->s[i]; j--; }}t->s[i]=t->s[0];returni;}voidQuick_sort(s_t*t,ints,intp){ inti;if(s<p){i=Partition(t,s,p); Quick_sort(t,s,i-1); Quick_sort(t,i+1,p);}}voidQuick(s_t*t,intn){Quick_sort(t,1,n);}intmain(){ s_t*t; inti,n,n1,Num; intflag=1; Keytypekx; t=news_t; cout<<"*********歡迎進(jìn)入學(xué)生管理系統(tǒng)**************"<<endl; cout<<"1按姓名順序查找2輸出所有學(xué)生信息3直接插入排序"<<endl; cout<<"4按C++選擇排序5按學(xué)號(hào)二分查找6按數(shù)據(jù)結(jié)構(gòu)冒泡排序"<<endl; cout<<"7按學(xué)號(hào)快速排序8建立學(xué)生的信息0退出程序"<<endl; cout<<"********************************************"<<endl; while(flag) { cout<<"請(qǐng)選擇要進(jìn)行的操作:"; cin>>n; switch(n) { case1: cout<<"請(qǐng)輸入要查找的學(xué)生的姓名:"<<endl; cin>>kx; i=S_Search(t,kx);if(i) { cout<<""<<"學(xué)號(hào)"<<""<<"姓名"<<""<<"班級(jí)"<<""<<"C++成績"<<""<<"數(shù)據(jù)結(jié)構(gòu)"<<""<<endl;cout<<""<<t->s[i].studentNum<<""<<t->s[i].name<<""<<t->s[i].classNum<<""<<t->s[i].C<<""<<t->s[i].structure<<""<<endl; cout<<endl; } elsecout<<"沒有此人!"<<endl; break; case2: cout<<"輸出現(xiàn)在學(xué)生的全部信息:"<<endl; print(t); break; case3:cout<<"直接插入排序:"<<endl;cout<<"排序前的學(xué)生信息"<<endl; print(t); cout<<"排序后的學(xué)生信息"<<endl; InserSort(t); print(t); break; case4:cout<<"選擇排序:"<<endl;cout<<"排序前的學(xué)生信息"<<endl; print(t); Select_Sort(t); cout<<"排序后的學(xué)生信息"<<endl;print(t); break; case5:Select_Sort(t); cout<<"輸入要查找的學(xué)號(hào)"<<endl; cin>>n1; i=Half_Sort(t,n1); if(i) { cout<<""<<"學(xué)號(hào)"<<""<<"姓名"<<""<<"班級(jí)"<<""<<"C++成績"<<""<<"數(shù)據(jù)結(jié)構(gòu)"<<""<<endl;cout<<""<<t->s[i].studentNum<<""<<t->s[i].name<<""<<t->s[i].classNum<<""<<t->s[i].C<<""<<t->s[i].structure<<""<<endl; cout<<endl; } elsecout<<"不存在此學(xué)號(hào)!"<<endl; break; case6:cout<<"冒泡排序"<<endl; cout<<"排序前的學(xué)生信息"<<endl; print(t); Bu_Sort(t); cout<<"排序后的學(xué)生信息"<<endl; print(t); break; case7: cout<<""<<endl; print(t); cout<<""<<endl; Quick(t,Num);print(t); break;case8: cout<<"請(qǐng)輸入學(xué)生的個(gè)數(shù):"; cin>>Num; creat(t,Num); break; case0:return0; default:cout<<"沒有此功能,請(qǐng)選擇正確的操作!"<<endl;break;} } return0;}運(yùn)行結(jié)果:表1輸入學(xué)生信息表2順序查找方法表3按姓名直接插入表4按C成績選擇排序 表5按學(xué)號(hào)進(jìn)行二分法查找表6按數(shù)據(jù)結(jié)構(gòu)成績進(jìn)行冒泡法排序四、實(shí)驗(yàn)總結(jié)(1)直接插入排序時(shí),要明確后移的結(jié)束條件,以便進(jìn)行正確插入。(2)選擇排序時(shí),選擇最小或是最大的數(shù)據(jù),放到最后。進(jìn)行N-1趟排序,排序完成。(3)二分法排序時(shí),正確返回查找的下標(biāo)。返回值flag要進(jìn)行賦初

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論