版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p> 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告</p><p><b> 程序清單:</b></p><p> 提交日期: 8月20日 成績: 指導(dǎo)老師:</p><p> 實驗題目: 內(nèi)排序算法比較</p><p> 問題解析(對問題的分析、理解和解題方法):
2、偽隨機數(shù)的產(chǎn)生是由 time. h 頭文件,以rand(time(0))為隨機種子的函數(shù)rand()產(chǎn)生,可以保持?jǐn)?shù)據(jù)的無序性。生成三種文件,分別保存正序.逆序.和隨機產(chǎn)生的數(shù)據(jù),并在程序執(zhí)行過程中可選擇用某一文件中的數(shù)據(jù)。用類涵蓋六種排序算法的內(nèi)部操作,并定義數(shù)組元素類。輸入以文件的方式來進(jìn)行,必須保證對六種排序算法的輸入數(shù)據(jù)是一樣且連續(xù)的。對于比較次數(shù)的統(tǒng)計加在比較判斷的前邊,在判斷失敗時也能統(tǒng)計到比較次數(shù)。對于存在遞歸的快速排序和
3、存在子函數(shù)的堆排序的比較次數(shù).移動次數(shù)統(tǒng)計采用以引用做函數(shù)參數(shù)。</p><p> 數(shù)據(jù)結(jié)構(gòu)選擇:選用動態(tài)數(shù)組為內(nèi)部基本運算結(jié)構(gòu),外部數(shù)據(jù)選用文件。算法設(shè)計:構(gòu)建動態(tài)數(shù)組元素類,六種排序操作.輸出操作為該類的函數(shù),輸入操作包含在構(gòu)造函數(shù)中。需求分析:外部數(shù)據(jù)只可以手動輸入隨機數(shù)的個數(shù)。程序運行中可選擇采用多種文件用各種算法測試多次。程序主線:產(chǎn)生正序文件f1.txt,倒序文件f2.txt,并生成三個隨機文件f3.
4、txt f4.txt f5.txt。選擇將某一文件導(dǎo)入程序,進(jìn)行排序,并測試各種算法的移動和比較次數(shù)。最后對結(jié)果進(jìn)行分析。</p><p> 任務(wù)分工、進(jìn)度計劃:周一:六種排序算法嵌入各主程序,并進(jìn)行初步測算。周二:主要解決程序文件輸入,輸出問題和各函數(shù)的接口問題。周三:對程序進(jìn)行調(diào)整,解決部分錯誤輸出。</p><p> 用戶手冊: 用戶需要選擇是否生成新的文件,還需要外部輸入待排序
5、數(shù)組元素個數(shù)即可,程序運行中用戶可選擇用某一文件進(jìn)行排序。</p><p> 測試結(jié)果:請輸入排序元素個數(shù):10000請輸入讀入何種待排序文件:(0:正序 1:逆序 2:隨機文件1 3:隨機文件2 4:隨機文件3)0Bubble:比較次數(shù)=9999 移動次數(shù):=0InsertSort:比較次數(shù)=9999 移動次數(shù):=19998SSort:比較次數(shù)=49995000 移動次數(shù):=29997QSort:比較次
6、數(shù)=19998 移動次數(shù):=39996ShellSort:比較次數(shù)=120009 移動次數(shù):=240018HeapSort:比較次數(shù)=264502 移動次數(shù):=394251是否繼續(xù)測試:(按任意鍵繼續(xù),按0退出:)1請輸入排序元素個數(shù):10000請輸入讀入何種待排序文件:(0:正序 1:逆序 2:隨機文件1 3:隨機文件2 4:隨機文件3)1Bubble:比較次數(shù)=49995000 移動次數(shù):=149985000InsertSo
7、rt:比較次數(shù)=9999 移動次數(shù):=19998SSort:比較次數(shù)=49995000 移動次數(shù):=29997QSort:比較次數(shù)=19998 移動次數(shù):=39996ShellSort:比較次數(shù)=120009 移動次數(shù):=</p><p> 總結(jié)(對所做程序進(jìn)行分析、評價運行結(jié)果、總結(jié)遇到的問題及解決辦法):總結(jié):能輸出各種算法對同一數(shù)組的比較.交換次數(shù),能較直觀的比較各種算法在不同情況下的優(yōu)劣。遇到如下問題:問
8、題1:快速排序的遞歸中和堆排序的子函數(shù)中比較次數(shù)和移動次數(shù)無法同時返回解決辦法:引用比較次數(shù)compare和移動次數(shù)move作為函數(shù)的參數(shù)。問題2:在數(shù)組很大>10000,正序或逆序時,快速排序堆棧溢出解決辦法:在編譯器中修改了堆棧上限。</p><p> #include<iostream></p><p> #include<ctime></p&
9、gt;<p> #include<fstream></p><p> using namespace std;</p><p> class lists{</p><p><b> public:</b></p><p><b> int n;</b></p
10、><p> void savefile();</p><p><b> lists();</b></p><p> int getlist(int n){return list[n];}</p><p> void output();</p><p> void Bubble();</
11、p><p> void InsertSort();</p><p> void SSort();</p><p> void QQSort(int m,int n,int &,int &);</p><p> void QSort();</p><p> void ShellSort();<
12、/p><p> void Restore(int *tree,const int root,const int n,int &,int &);</p><p> void HeapSort();</p><p><b> private:</b></p><p> int *list;</p&g
13、t;<p><b> };</b></p><p> lists::lists(){</p><p><b> int s0;</b></p><p> savefile();</p><p> cout<<"請輸入讀入何種待排序文件:(0:正序 1:
14、逆序 2:隨機文件1 3:隨機文件2 4:隨機文件3)"<<endl;</p><p><b> cin>>s0;</b></p><p> list=new int[n];</p><p> switch(s0){</p><p> case 0:{ifstream in
15、file("f1.txt",ios::in);</p><p> for(int i=0;i<n;i++)infile>>list[i];</p><p> infile.close();break;}</p><p> case 1:{ifstream infile("f2.txt",ios::in)
16、;</p><p> for(int i=0;i<n;i++)infile>>list[i];</p><p> infile.close();break;}</p><p> case 2:{ifstream infile("f3.txt",ios::in);</p><p> for(int
17、i=0;i<n;i++)infile>>list[i];</p><p> infile.close();break;}</p><p> case 3:{ifstream infile("f4.txt",ios::in);</p><p> for(int i=0;i<n;i++)infile>>lis
18、t[i];</p><p> infile.close();break;}</p><p> case 4:{ifstream infile("f5.txt",ios::in);</p><p> for(int i=0;i<n;i++)infile>>list[i];</p><p> infi
19、le.close();break;}</p><p><b> }</b></p><p><b> }</b></p><p> void lists::output(){</p><p> for(int i=0;i<n;i++)</p><p> cou
20、t<<list[i]<<endl;</p><p><b> }</b></p><p><b> //冒泡排序</b></p><p> void lists::Bubble(){</p><p> int bound,j,t;</p><p&g
21、t;<b> int e;</b></p><p> int compare=0,move=0;</p><p> bound=n-1;</p><p> while(bound){</p><p><b> t=0;</b></p><p> for(j=0;j
22、<bound;j++){</p><p> compare++;</p><p> if(list[j]>list[j+1]){</p><p><b> move+=3;</b></p><p> e=list[j];</p><p> list[j]=list[j+1];
23、</p><p> list[j+1]=e;</p><p><b> t=j;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> bound=t;</b><
24、;/p><p><b> }</b></p><p> cout<<"Bubble:比較次數(shù)="<<compare<<" 移動次數(shù):="<<move<<endl;</p><p><b> }</b></p>
25、<p><b> //直接插入排序</b></p><p> void lists::InsertSort(){</p><p><b> int e,i;</b></p><p> int compare=0,move=0;</p><p> //list[-1]=0;&l
26、t;/p><p> for(int j=1;j<n;j++){</p><p> e=list[j];</p><p><b> move++;</b></p><p><b> i=j-1;</b></p><p> compare++;</p>
27、<p> while(e<list[i]){</p><p> list[i+1]=list[i];</p><p><b> move++;</b></p><p><b> i--;</b></p><p><b> }</b></p>
28、<p> list[i+1]=e;</p><p><b> move++;</b></p><p><b> }</b></p><p> cout<<"InsertSort:比較次數(shù)="<<compare<<" 移動次數(shù):=&quo
29、t;<<move<<endl;</p><p><b> }</b></p><p><b> //直接選擇排序</b></p><p> void lists::SSort(){</p><p><b> int t;</b></p>
30、;<p><b> int e;</b></p><p> int compare=0,move=0;</p><p> for(int j=n-1;j>=1;j--){</p><p><b> t=0;</b></p><p> for(int i=1;i<=
31、j;i++){</p><p> compare++;</p><p> if(list[t]<list[i])</p><p><b> t=i;</b></p><p><b> }</b></p><p> e=list[t];</p>&
32、lt;p> list[t]=list[j];</p><p> list[j]=e;</p><p><b> move+=3;</b></p><p><b> }</b></p><p> cout<<"SSort:比較次數(shù)="<<co
33、mpare<<" 移動次數(shù):="<<move<<endl;</p><p><b> }</b></p><p><b> //快速排序</b></p><p> void lists::QQSort(int m,int n,int &a,int &am
34、p;b){</p><p> int i,j,k,temp;</p><p><b> if(m<n){</b></p><p><b> i=m;</b></p><p><b> j=n+1;</b></p><p> k=list[
35、m];</p><p><b> b++;</b></p><p> while(i<j){</p><p><b> i++;</b></p><p><b> a++;</b></p><p> while(list[i]<k)
36、i++;</p><p><b> j--;</b></p><p><b> a++;</b></p><p> while(list[j]>k)j--;</p><p><b> if(i<j){</b></p><p> te
37、mp=list[i];</p><p> list[i]=list[j];</p><p> list[j]=temp;</p><p><b> b+=3;</b></p><p><b> }</b></p><p><b> }</b>&
38、lt;/p><p> temp=list[m];</p><p> list[m]=list[j];</p><p> list[j]=temp;</p><p><b> b+=3;</b></p><p> QQSort(m,j-1,a,b);</p><p>
39、 QQSort(j+1,n,a,b);</p><p><b> }</b></p><p><b> }</b></p><p><b> //快速排序</b></p><p> void lists::QSort(){</p><p> i
40、nt compare=0,move=0;</p><p> QQSort(0,n-1,compare,move);</p><p> cout<<"QSort:比較次數(shù)="<<compare<<" 移動次數(shù):="<<move<<endl;</p><p><
41、b> }</b></p><p><b> //希爾排序</b></p><p> void lists::ShellSort(){</p><p> int gap=n-1;</p><p><b> int i;</b></p><p> i
42、nt compare=0,move=0;</p><p> while(gap>=1){</p><p> gap=gap/2;</p><p> for(i=0;i<gap;i++){</p><p><b> int e;</b></p><p><b> in
43、t t;</b></p><p> for(int j=i+gap;j<n;j=j+gap){</p><p> e=list[j];</p><p><b> t=j-gap;</b></p><p><b> move++;</b></p><p&g
44、t; compare++;</p><p> while(e<list[t]){</p><p> list[t+gap]=list[t];</p><p><b> t=t-gap;</b></p><p><b> move++;</b></p><p>
45、 if(t<=i)break;</p><p><b> }</b></p><p> list[t+gap]=e;</p><p><b> move++;</b></p><p><b> }</b></p><p><b>
46、; }</b></p><p><b> }</b></p><p> cout<<"ShellSort:比較次數(shù)="<<compare<<" 移動次數(shù):="<<move<<endl;</p><p><b> }&
47、lt;/b></p><p><b> //重建堆</b></p><p> void lists::Restore(int *tree,const int root,const int n,int &a,int &b){</p><p><b> int m,e;</b></p>
48、<p> int j=root;</p><p> while(j<=n/2-1){</p><p><b> a++;</b></p><p> if((2*j<n-1)&&(tree[2*j]<tree[2*j+1]))m=2*j+1;</p><p> els
49、e m=2*j;</p><p><b> a++;</b></p><p> if(tree[j]<tree[m]){</p><p><b> b+=3;</b></p><p> e=tree[j];</p><p> tree[j]=tree[m];&
50、lt;/p><p> tree[m]=e;</p><p><b> j=m;</b></p><p><b> }</b></p><p> else j=n-1;</p><p><b> }</b></p><p>&
51、lt;b> }</b></p><p> void lists::HeapSort(){</p><p><b> int i,e;</b></p><p> int compare=0,move=0;</p><p> for(i=(n-1)/2;i>=0;i--)</p>
52、<p> Restore(list,i,n,compare,move);</p><p> for(i=n-1;i>0;i--){</p><p> e=list[i];</p><p> list[i]=list[0];</p><p> list[0]=e;</p><p> Res
53、tore(list,0,i,compare,move);</p><p><b> }</b></p><p> cout<<"HeapSort:比較次數(shù)="<<compare<<" 移動次數(shù):="<<move<<endl;</p><p>
54、<b> }</b></p><p> void lists::savefile(){</p><p><b> int i;</b></p><p> srand(time(0));</p><p> cout<<"請輸入排序元素個數(shù):"<<e
55、ndl;</p><p><b> cin>>n;</b></p><p> list=new int[n];</p><p> ofstream outfile1("f1.txt",ios::out);</p><p> for(i=0;i<n;i++){</p>
56、;<p> list[i]=i+1;</p><p> outfile1<<list[i]<<endl;</p><p> }outfile1.close();</p><p> ofstream outfile2("f2.txt",ios::out);</p><p> f
57、or(i=0;i<n;i++){</p><p> list[i]=n-i;</p><p> outfile2<<list[i]<<endl;</p><p> }outfile2.close();</p><p> ofstream outfile3("f3.txt",ios::o
58、ut);</p><p> for(i=0;i<n;i++){</p><p> list[i]=rand()%10000+1;</p><p> outfile3<<list[i]<<endl;</p><p> }outfile3.close();</p><p> ofst
59、ream outfile4("f4.txt",ios::out);</p><p> for(i=0;i<n;i++){</p><p> list[i]=rand()%10000+1;</p><p> outfile4<<list[i]<<endl;</p><p> }outfi
60、le4.close();</p><p> ofstream outfile5("f5.txt",ios::out);</p><p> for(i=0;i<n;i++){</p><p> list[i]=rand()%10000+1;</p><p> outfile5<<list[i]<
61、;<endl;</p><p> }outfile5.close();</p><p><b> }</b></p><p> #include<iostream></p><p> #include"排序.h"</p><p> using nam
62、espace std;</p><p> int sort(){</p><p> class lists a_list;</p><p> //cout<<"排序前:"<<endl;</p><p> //a_list.output();</p><p> a
63、_list.Bubble();</p><p> a_list.InsertSort();</p><p> a_list.SSort();</p><p> a_list.QSort();</p><p> a_list.ShellSort();</p><p> a_list.HeapSort();<
64、;/p><p> //cout<<"排序后:"<<endl;</p><p> //a_list.output();</p><p><b> return 0;</b></p><p><b> }</b></p><p>
65、; int main(){</p><p><b> int flag;</b></p><p><b> do{</b></p><p><b> sort();</b></p><p> cout<<"是否繼續(xù)測試:(按任意鍵繼續(xù),按0退出:
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課程設(shè)計-排序算法比較
- 課程設(shè)計報告---排序算法的實現(xiàn)與比較
- 內(nèi)部排序課程設(shè)計---內(nèi)部排序算法的比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---各種內(nèi)排序性能比較
- 《數(shù)據(jù)結(jié)構(gòu)》課程設(shè)計報告---排序算法的實現(xiàn)與比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--內(nèi)部排序算法的比較
- 拓?fù)渑判蛘n程設(shè)計報告
- 課程設(shè)計報告通用排序
- 課程設(shè)計---設(shè)計排序典型算法(冒泡與快速排序)
- 幾種排序算法的比較設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---幾種排序算法的演示
- visual_c++_6.0_各種排序的算法課程設(shè)計報告
- 課程設(shè)計---多種排序的實現(xiàn)與比較
- 拓?fù)渑判蛘n程設(shè)計--拓?fù)渑判蛩惴ǖ难芯颗c實現(xiàn)
- 幾種排序算法的比較設(shè)計報告.doc
- 數(shù)據(jù)結(jié)構(gòu)各種排序算法的課程設(shè)計實驗報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--內(nèi)部排序算法的性能分析
評論
0/150
提交評論