版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 數(shù)據(jù)結(jié)構(gòu)</b></p><p><b> 課程設(shè)計(jì)報(bào)告</b></p><p><b> 題目</b></p><p><b> 排序</b></p><p><b> 需求分析</b><
2、/p><p><b> 2.1、選題要求</b></p><p> ?。?)設(shè)計(jì)一個(gè)菜單,格式如下:</p><p><b> 1.直接插入排序</b></p><p><b> 2.希爾排序</b></p><p><b> 3.冒泡排序
3、</b></p><p><b> 4快速排序</b></p><p><b> 5選擇排序</b></p><p><b> 6.堆排序</b></p><p><b> 7.退出程序</b></p><p>
4、 ?。?)選擇不同的菜單進(jìn)行相應(yīng)的排序,并給出排序的關(guān)鍵字序列。</p><p> 2.2、選題的意義及背景</p><p> 排序是計(jì)算機(jī)程序設(shè)計(jì)中的一種重要操作。它的功能是將一個(gè)數(shù)據(jù)元素的任意序列,重新排列成一個(gè)按關(guān)鍵字有序的序列。</p><p> 排序的方法很多,但是就其全面性能而言,很難提出一種被認(rèn)為是最好的方法,每一種方法都有各自的優(yōu)缺點(diǎn),適合在不
5、同的環(huán)境下使用。如果按排序過程中依據(jù)的不同原則對(duì)內(nèi)部排序方法進(jìn)行分類,則大致可分為插入排序,交換排序,選擇排序,歸并排序和記數(shù)排序等五類。</p><p> 此實(shí)驗(yàn)通過對(duì)直插排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序這幾種內(nèi)部排序算法進(jìn)行比較,能使我們更好的掌握這些排序的基本思想及排序算法。通過該題目的設(shè)計(jì)過程,可以加深理解各種數(shù)據(jù)結(jié)構(gòu)的邏輯結(jié)構(gòu)、存儲(chǔ)結(jié)構(gòu)及相應(yīng)上運(yùn)算的實(shí)現(xiàn),進(jìn)一步理解和熟練掌握課本中
6、所學(xué)的各種數(shù)據(jù)結(jié)構(gòu),學(xué)會(huì)如何把學(xué)到的知識(shí)用于解決實(shí)際問題,培養(yǎng)我們的動(dòng)手能力。</p><p> 2.3、課程設(shè)計(jì)目標(biāo)</p><p> 本課程設(shè)計(jì)對(duì)以下內(nèi)部排序算法進(jìn)行比較:直插排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序。</p><p> 待排序表的元素關(guān)鍵字為整數(shù),用隨機(jī)不同的測(cè)試數(shù)據(jù)做測(cè)試比較。比較的指標(biāo)為關(guān)鍵字的比較次數(shù)、關(guān)鍵字的移動(dòng)次數(shù)和
7、所用時(shí)間。最后對(duì)這些內(nèi)部排序算法進(jìn)行性能分析。</p><p><b> 概要設(shè)計(jì)</b></p><p><b> 3.1、原始數(shù)據(jù)</b></p><p> 用戶輸入記錄的個(gè)數(shù),數(shù)據(jù)由隨機(jī)數(shù)產(chǎn)生器生成。</p><p><b> 3.2、輸出數(shù)據(jù)</b></p
8、><p> 產(chǎn)生的隨機(jī)數(shù)分別用直插排序、希爾排序、冒泡排序、快速排序、選擇排序、堆排序。這些排序方法進(jìn)行排序,輸出關(guān)鍵字的比較次數(shù)、移動(dòng)次數(shù)和所用時(shí)間。</p><p><b> 3.3、數(shù)據(jù)處理</b></p><p><b> 3.3、存儲(chǔ)結(jié)構(gòu)</b></p><p> typedef st
9、ruct{</p><p><b> int key;</b></p><p> } RedType;</p><p><b> 詳細(xì)設(shè)計(jì)</b></p><p> 4.1、各排序算法的基本思想</p><p><b> 1)直接插入排序</b>
10、;</p><p> 每次從無序表中取出第一個(gè)元素,把它插入到有序表的合適位置,使有序表仍然有序。第一趟比較前兩個(gè)數(shù),然后把第二個(gè)數(shù)按大小插入到有序表中; 第二趟把第三個(gè)數(shù)據(jù)與前兩個(gè)數(shù)從后向前掃描,把第三個(gè)數(shù)按大小插入到有序表中;依次進(jìn)行下去,進(jìn)行了(n-1)趟掃描以后就完成了整個(gè)排序過程。</p><p><b> 2) 希爾排序</b></p>
11、<p> 先取一個(gè)正整數(shù)d1<n,把所有序號(hào)相隔d1的數(shù)組元素放一組,組內(nèi)進(jìn)行直接插入排序;然后取d2<d1,重復(fù)上述分組和排序操作;直至di=1,即所有記錄放進(jìn)一個(gè)組中排序?yàn)橹梗?lt;/p><p><b> 3)冒泡排序</b></p><p> 冒泡排序的基本概念是:依次比較相鄰的兩個(gè)數(shù),將大數(shù)放在前面,小數(shù)放在后面。即首先比較第1個(gè)和第
12、2個(gè)數(shù),將大數(shù)放前,小數(shù)放后。然后比較第2個(gè)數(shù)和第3個(gè)數(shù),將大數(shù)放前,小數(shù)放后,如此繼續(xù),直至比較最后兩個(gè)數(shù),將大數(shù)放前,小數(shù)放后,此時(shí)第一趟結(jié)束,在最后的數(shù)必是所有數(shù)中的最小數(shù)。重復(fù)以上過程,仍從第一對(duì)數(shù)開始比較(因?yàn)榭赡苡捎诘?個(gè)數(shù)和第3個(gè)數(shù)的交換,使得第1個(gè)數(shù)不再大于第2個(gè)數(shù)),將大數(shù)放前,小數(shù)放后,一直比較到最小數(shù)前的一對(duì)相鄰數(shù),將大數(shù)放前,小數(shù)放后,第二趟結(jié)束,在倒數(shù)第二個(gè)數(shù)中得到一個(gè)新的最小數(shù)。如此下去,直至最終完成排序。由
13、于在排序過程中總是大數(shù)往前放,小數(shù)往后放,相當(dāng)于氣泡往上升,所以稱作冒泡排序。</p><p><b> 4)快速排序</b></p><p> 首先檢查數(shù)據(jù)列表中的數(shù)據(jù)數(shù),如果小于兩個(gè),則直接退出程序。如果有超過兩個(gè)以上的數(shù)據(jù),就選擇一個(gè)分割點(diǎn)將數(shù)據(jù)分成兩個(gè)部分,小于分割點(diǎn)的數(shù)據(jù)放在一組,其余的放在另一組,然后分別對(duì)兩組數(shù)據(jù)排序;</p><
14、p><b> 5)選擇排序</b></p><p> ?。?)在一組元素V[i]~V[n-1]中選擇具有最小排序碼的元素(2)若它不是這組元素中的第個(gè)元素,則將它與這一組元素中的第一個(gè)元素對(duì)調(diào);(3)在這組元素中剔除這個(gè)具有最小排序碼的元素,在剩下的元素V[i+1]~V[n-1]中重復(fù)執(zhí)行第(1)(2)步,直到剩余元素只有一個(gè)為止。</p><p><b
15、> 6) 堆排序</b></p><p> 堆排序是一樹形選擇排序,在排序過程中,將R[1..N]看成是一顆完全二叉樹的順序存儲(chǔ)結(jié)構(gòu),利用完全二叉樹中雙親結(jié)點(diǎn)和孩子結(jié)點(diǎn)之間的內(nèi)在關(guān)系來選擇最小的元素;堆的定義: N個(gè)元素的序列K1,K2,K3,...,Kn.稱為堆,當(dāng)且僅當(dāng)該序列滿足特性:Ki≤K2i Ki ≤K2i+1(1≤ I≤ [N/2]);</p><p>&
16、lt;b> 4.2、程序代碼</b></p><p> 4.2.1 函數(shù)聲明</p><p> #include <stdio.h></p><p> #include <iostream.h></p><p> #include <stdlib.h></p>&l
17、t;p> #include <string.h></p><p> #include <time.h></p><p> #include <windows.h></p><p> #include <winbase.h></p><p> #include <iomani
18、p.h></p><p> #define MAXSIZE 80</p><p> #define TRUE 1</p><p> #define FALSE 0</p><p> typedef int BOOL;</p><p> typedef struct{</p><p&g
19、t;<b> int key;</b></p><p> } RedType;</p><p> class LinkList</p><p><b> {</b></p><p><b> public:</b></p><p> RedT
20、ype r[MAXSIZE+1];</p><p> int Length;</p><p> int CmpNum, ChgNum;</p><p> LinkList();</p><p> bool LT(int i, int j);</p><p> void Display();</p>
21、<p> void Insert( int dk);</p><p> void ShellSort();</p><p> int Partition( int low, int high);</p><p> void QSort( int low, int high);</p><p> void QuickSo
22、rt();</p><p> void HeapAdjust( int s, int m);</p><p> void HeapSort();</p><p> void BubbleSort();</p><p> int SelectMinKey( int k);</p><p> void SelSo
23、rt();</p><p> void SelectSort();</p><p><b> }; </b></p><p> LinkList::LinkList(){</p><p><b> int i;</b></p><p> for (i = 0; i
24、<= MAXSIZE; i++)</p><p> r[i].key = rand()%80;</p><p> Length=MAXSIZE+1;</p><p><b> CmpNum=0;</b></p><p><b> ChgNum=0;</b></p><
25、;p><b> }</b></p><p> bool LinkList::LT(int i, int j){</p><p> (CmpNum)++;</p><p> if (i < j)</p><p> return TRUE;</p><p><b>
26、else</b></p><p> return FALSE;</p><p><b> }</b></p><p> void LinkList::Display()</p><p><b> {</b></p><p><b> int j
27、;</b></p><p> for(int i=0;i<=MAXSIZE;i++)</p><p><b> {</b></p><p> cout<<setw(6)<<r[i].key;</p><p> if(++j%10==0)</p><p&
28、gt; cout<<endl;</p><p><b> }</b></p><p> cout<<endl;</p><p><b> }</b></p><p> 4.2.2六種排序算法代碼</p><p><b> //插入
29、排序</b></p><p> void LinkList::Insert(int dk){</p><p><b> int i, j;</b></p><p> RedType Temp;</p><p> for (i = dk; i < Length; i++)</p>&
30、lt;p><b> {</b></p><p> if (LT(r[i].key, r[i - dk].key))</p><p><b> {</b></p><p> memcpy(&Temp, &r[i], sizeof(RedType));</p><p>
31、for (j = i - dk; j >= 0 && LT(Temp.key, r[j].key); j -= dk)</p><p><b> {</b></p><p> (ChgNum)++;</p><p> memcpy(&r[j + dk], &r[j], sizeof(RedType))
32、;</p><p><b> }</b></p><p> memcpy(&r[j + dk], &Temp, sizeof(RedType));</p><p><b> }</b></p><p><b> }</b></p><
33、p><b> }</b></p><p><b> //希爾排序</b></p><p> void LinkList::ShellSort()</p><p><b> {</b></p><p> int t=Length+1;</p><
34、;p><b> do{</b></p><p><b> t=t/3+1;</b></p><p> Insert( t);</p><p><b> }</b></p><p> while(t>1);</p><p><b
35、> }</b></p><p><b> //快速排序</b></p><p> int LinkList::Partition(int low, int high){</p><p> RedType Temp;</p><p> int PivotKey;</p><p
36、> memcpy(&Temp, &r[low], sizeof(RedType));</p><p> PivotKey = r[low].key;</p><p> while (low < high){</p><p> while (low < high &&r[high].key >= Pivo
37、tKey){</p><p><b> high--;</b></p><p> (CmpNum)++;</p><p><b> }</b></p><p> (ChgNum)++;</p><p> memcpy(&r[low], &r[high
38、], sizeof(RedType));</p><p> while (low < high && r[low].key <= PivotKey){</p><p><b> low++;</b></p><p> (CmpNum)++;</p><p><b> }<
39、;/b></p><p> (ChgNum)++;</p><p> memcpy(&r[high], &r[low], sizeof(RedType));</p><p><b> }</b></p><p> memcpy(&r[low], &Temp, sizeof(R
40、edType));</p><p> return low;</p><p><b> }</b></p><p> void LinkList::QSort( int low, int high){</p><p> int PivotLoc = 0;</p><p> if (low
41、 < high){</p><p> PivotLoc = Partition( low, high);</p><p> QSort(low, PivotLoc - 1);</p><p> QSort( PivotLoc + 1, high);</p><p><b> }</b></p>
42、<p><b> }</b></p><p> void LinkList::QuickSort(){</p><p> QSort(0, Length - 1);</p><p><b> }</b></p><p><b> //堆排序</b><
43、/p><p> void LinkList::HeapAdjust(int s, int m){</p><p> RedType Temp;</p><p> int j = 0;</p><p><b> s++;</b></p><p> memcpy(&Temp, &
44、r[s - 1], sizeof(RedType));</p><p> for (j = 2 * s; j <= m; j *= 2){</p><p> if (j < m && LT(r[j - 1].key, r[j].key))</p><p><b> ++j;</b></p><
45、;p> if (!LT(Temp.key, r[j - 1].key))</p><p><b> break;</b></p><p> (ChgNum)++;</p><p> memcpy(&r[s - 1], &r[j - 1], sizeof(RedType));</p><p>
46、<b> s = j;</b></p><p><b> }</b></p><p> memcpy(&r[s - 1], &Temp, sizeof(RedType));</p><p><b> }</b></p><p> void LinkLi
47、st::HeapSort(){</p><p> int i = 0;</p><p> RedType Temp;</p><p> for (i = Length / 2-1; i >= 0; i--)</p><p> HeapAdjust(i, Length);</p><p> for (i
48、= Length; i > 1; i--){</p><p> memcpy(&Temp, &r[0], sizeof(RedType));</p><p> (ChgNum)++;</p><p> memcpy(&r[0], &r[i - 1], sizeof(RedType));</p><p&g
49、t; memcpy(&r[i - 1], &Temp, sizeof(RedType));</p><p> HeapAdjust( 0, i - 1);</p><p><b> }</b></p><p><b> }</b></p><p><b> //冒
50、泡排序</b></p><p> void LinkList::BubbleSort(){</p><p><b> int i, j;</b></p><p> RedType temp;</p><p> for (i = 1; i <= MAXSIZE; i++){</p>
51、<p> for (j = 1; j <= MAXSIZE - i; j++){</p><p> if (!LT(r[j].key, r[j + 1].key)){</p><p> (ChgNum)++;</p><p> memcpy(&temp, &r[j], sizeof(RedType));</p>
52、<p> memcpy(&r[j], &r[j + 1], sizeof(RedType));</p><p> memcpy(&r[j + 1], &temp, sizeof(RedType));</p><p><b> }</b></p><p><b> }</b>
53、</p><p><b> }</b></p><p><b> }</b></p><p><b> //選擇排序</b></p><p> int LinkList::SelectMinKey( int i)</p><p><b>
54、; {</b></p><p> int Min = i;</p><p> for (int k=i; k < Length; k++)</p><p><b> {</b></p><p> if (!LT(r[Min].key, r[k].key))</p><p&g
55、t;<b> Min = k;</b></p><p><b> }</b></p><p> return Min;</p><p><b> }</b></p><p> void LinkList::SelSort(){</p><p>
56、<b> int i, j;</b></p><p> RedType temp;</p><p> for (i = 0; i < Length; i++){</p><p> j = SelectMinKey( i);</p><p> if (i != j){</p><p>
57、; (ChgNum)++;</p><p> memcpy(&temp, &r[i], sizeof(RedType));</p><p> memcpy(&r[i], &r[j], sizeof(RedType));</p><p> memcpy(&r[j], &temp, sizeof(RedType))
58、;</p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p> 4.2.3 排序算法的選擇</p><p> void LinkList::SelectSort(){<
59、;/p><p> cout<<" 歡迎來到排序綜合系統(tǒng) "<<endl;</p><p> cout<<"============================================ ="<<endl;</p><
60、p> cout<<" 菜單 "<<endl;</p><p> cout<<"============================================= "<<endl;</p><p>
61、 cout<<"1. 直接插入排序 "<<endl;</p><p> cout<<"2. 希爾排序 "<<endl;</p><p> cout
62、<<"3. 冒泡排序 "<<endl;</p><p> cout<<"4. 快速排序 "<<endl;</p><p> cout<
63、<"5. 選擇排序 "<<endl;</p><p> cout<<"6. 堆排序 "<<endl;</p><p> cout<<
64、;"7. 退出程序 "<<endl;</p><p> cout<<"請(qǐng)選擇需要進(jìn)行的操作: "<<endl;</p><p><b> }</b>&
65、lt;/p><p> void LinkList::AllAbove(){</p><p> int TempTime;</p><p> int SpendTime;</p><p> cout<<endl;</p><p> LinkList();</p><p> co
66、ut<<"插入排序:"<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> Insert( 1);</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p> cou
67、t<<endl;</p><p> cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<Spend
68、Time<<"ms"<<endl;</p><p> LinkList();//隨機(jī)數(shù)列復(fù)位</p><p> cout<<endl;</p><p> cout<<"希爾排序:"<<endl;</p><p> TempTime =
69、(int)GetTickCount();</p><p> ShellSort();</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p> cout<<endl;</p><p> cout<<"CompareNumber=&quo
70、t;<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p> LinkList();
71、//隨機(jī)數(shù)列復(fù)位</p><p> cout<<endl;</p><p> cout<<"快速排序:"<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> QuickSort();</p><
72、;p> SpendTime = (int)GetTickCount() - TempTime;</p><p> cout<<endl;</p><p> cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber="&
73、lt;<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p> LinkList();//隨機(jī)數(shù)列復(fù)位</p><p> cout<<endl;</p><p&g
74、t; cout<<"堆排序:"<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> HeapSort();</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p>
75、 cout<<endl;</p><p> cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<
76、SpendTime<<"ms"<<endl;</p><p> LinkList();//隨機(jī)數(shù)列復(fù)位</p><p> cout<<endl;</p><p> cout<<"冒泡排序:"<<endl;</p><p> Tem
77、pTime = (int)GetTickCount();</p><p> BubbleSort();</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p> cout<<endl;</p><p> cout<<"CompareNu
78、mber="<<CmpNum<<" "<<"ChageNumber="<<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p> Li
79、nkList();//隨機(jī)數(shù)列復(fù)位</p><p> cout<<endl;</p><p> cout<<"選擇排序:"<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> SelSort();</p&g
80、t;<p> SpendTime = (int)GetTickCount() - TempTime;</p><p> cout<<endl;</p><p> cout<<"CompareNumber="<<CmpNum<<" "<<"ChageNumber=
81、"<<ChgNum<<" "<<"TimeSpent="<<SpendTime<<"ms"<<endl;</p><p><b> }</b></p><p> 4.2.4主函數(shù)程序代碼</p><p&g
82、t; void main(){</p><p> int select = 0;</p><p> int SpendTime = 0;</p><p> int TempTime;</p><p><b> do{</b></p><p> LinkList L;</p>
83、<p> L.SelectSort();</p><p> cin>>select;</p><p> switch (select)</p><p><b> {</b></p><p><b> case 1:</b></p><p>
84、 cout<<"插入排序前:"<<endl;</p><p> L.Display();</p><p> cout<<"插入排序后:"<<endl; </p><p> TempTime = (int)GetTickCount();</p><p&
85、gt; L.Insert(1);</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p> L.Display();</p><p> cout<<endl;</p><p> cout<<"比較次數(shù)="<<L.
86、CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b> break;</b><
87、;/p><p><b> case 2:</b></p><p> cout<<"希爾排序前:"<<endl;</p><p> L.Display();</p><p> cout<<"希爾排序后:"<<endl;</p&
88、gt;<p> cout<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> L.ShellSort();</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p> L.Displ
89、ay();</p><p> cout<<endl;</p><p> cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間=&q
90、uot;<<SpendTime<<"ms"<<endl;</p><p><b> break;</b></p><p><b> case 3:</b></p><p> cout<<"冒泡排序前:"<<endl;&
91、lt;/p><p> L.Display();</p><p> cout<<"冒泡排序后:"<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> L.BubbleSort();</p><p> Spend
92、Time = (int)GetTickCount() - TempTime;</p><p> L.Display();</p><p> cout<<endl;</p><p> cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移
93、動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b> break;</b></p><p><b> case 4:</b>
94、;</p><p> cout<<"快速排序前:"<<endl;</p><p> L.Display();</p><p> cout<<"快速排序后:"<<endl;</p><p> TempTime = (int)GetTickCount(
95、);</p><p> L.QuickSort();</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p> L.Display();</p><p> cout<<endl;</p><p> cout<<"
96、;比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b>
97、; break;</b></p><p><b> case 5:</b></p><p> cout<<"選擇排序前:"<<endl;</p><p> L.Display();</p><p> cout<<"選擇排序后:&quo
98、t;<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> L.SelSort();</p><p> SpendTime = (int)GetTickCount() - TempTime;</p><p> L.Display();</p><
99、;p> cout<<endl;</p><p> cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgNum<<" "<<"所需時(shí)間="<<SpendTim
100、e<<"ms"<<endl;</p><p><b> break;</b></p><p><b> case 6:</b></p><p> cout<<"堆排序前:"<<endl;</p><p>
101、 L.Display();</p><p> cout<<"堆排序后:"<<endl;</p><p> TempTime = (int)GetTickCount();</p><p> L.HeapSort();</p><p> SpendTime = (int)GetTickCount
102、() - TempTime;</p><p> L.Display();</p><p> cout<<endl;</p><p> cout<<"比較次數(shù)="<<L.CmpNum<<" "<<"關(guān)鍵字移動(dòng)次數(shù)="<<L.ChgN
103、um<<" "<<"所需時(shí)間="<<SpendTime<<"ms"<<endl;</p><p><b> break;</b></p><p><b> default:</b></p><p>
104、 cout<<"please input numbers again"<<endl;</p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p>
105、 while(select!=7);</p><p><b> }</b></p><p><b> 調(diào)試分析</b></p><p> 1.對(duì)正序、逆序和若干不同程度隨機(jī)打亂的可排序表,進(jìn)行各種排序方法的比較測(cè)試,得到的測(cè)試數(shù)據(jù)具有較好的典型性和可比較性。通過設(shè)計(jì)和實(shí)現(xiàn)指定程序的隨機(jī)亂序算法,對(duì)隨機(jī)數(shù)序列的產(chǎn)生有了
106、具體的認(rèn)識(shí)和實(shí)踐。</p><p> 2.將排序算法中的關(guān)鍵字比較和交換分別由兩個(gè)內(nèi)部操作實(shí)現(xiàn),較好的解決了排序算法的關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)的統(tǒng)計(jì)問題。</p><p> 3.本實(shí)習(xí)作業(yè)采用循序漸進(jìn)的策略,首先設(shè)計(jì)和實(shí)現(xiàn)可排序表的建立和隨機(jī)操作,然后用插入排序驗(yàn)證各種內(nèi)部輔助操作的正確性,進(jìn)而逐個(gè)加入其他排序算法,最后完成對(duì)測(cè)試結(jié)果的顯示。調(diào)試能力有了提高。</p>&
107、lt;p><b> 用戶手冊(cè) </b></p><p> ?。?)本程序的運(yùn)行環(huán)境為VC++。</p><p> (2)進(jìn)入演示程序后,即顯示文本方式的用戶界面。</p><p> ?。?)演示程序以人機(jī)對(duì)話的形式進(jìn)行。只要輸入記錄的個(gè)數(shù),程序便產(chǎn)生80組隨機(jī)數(shù),顯示通過直插排序、冒泡排序、快速排序、選擇排序、堆排序?qū)﹄S機(jī)數(shù)進(jìn)行排序時(shí)
108、,關(guān)鍵字的比較次數(shù)、移動(dòng)次數(shù)的平均值和所用時(shí)間,從而直觀的比較各種內(nèi)部排序算法的優(yōu)劣。</p><p><b> 7.測(cè)試結(jié)果:</b></p><p> 7.1、進(jìn)入程序后即顯示文本方式的用戶界面:</p><p> 圖5.1 進(jìn)入程序后的界面</p><p> 7.2、開始運(yùn)行時(shí)的用戶界面:</p>
109、;<p> 1)輸入1回車,即得直接插入排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)和時(shí)間。如圖5.2:</p><p> 圖5.2 輸入1后的運(yùn)行結(jié)果</p><p> 2)輸入2回車,即得希爾排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.3:</p><p> 圖5.3 輸入2后的運(yùn)行結(jié)果</p><p&g
110、t; 3)輸入3回車,即得快速排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.4:</p><p> 圖5.4 輸入3后的運(yùn)行結(jié)果</p><p> 4)輸入4回車,即得堆排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.5:</p><p> 圖5.5 輸入4后的運(yùn)行結(jié)果</p><p> 5)輸入5回車,即
111、得冒泡排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.6:</p><p> 圖5.6 輸入5后的運(yùn)行結(jié)果</p><p> 6)輸入6回車,即得選擇排序的排序結(jié)果及其關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)及時(shí)間,如圖5.7:</p><p> 圖5.7 輸入6后的運(yùn)行結(jié)果</p><p> 7)輸入7回車,即退出該程序。</p
112、><p> 說明:從結(jié)果可以看出來,六種算法所用的時(shí)間均為零,這是因?yàn)榕判虻碾S機(jī)數(shù)太少,如果數(shù)再多點(diǎn),會(huì)有時(shí)間。</p><p><b> 8.附錄:</b></p><p> 在這次的數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)中,排序綜合,通過該題目的設(shè)計(jì)過程,加深了對(duì)排序算法的理解,對(duì)排序算法上基本運(yùn)算的實(shí)現(xiàn)有所掌握,對(duì)課本中所學(xué)的各種數(shù)據(jù)結(jié)構(gòu)進(jìn)一步理解和掌握,學(xué)
113、會(huì)了如何把學(xué)到的知識(shí)用于解決實(shí)際問題,鍛煉了自己動(dòng)手的能力。</p><p><b> 參考書籍:</b></p><p> [1]數(shù)據(jù)結(jié)構(gòu)——習(xí)題與解析,李春葆,清華大學(xué)出版社</p><p> [2]數(shù)據(jù)結(jié)構(gòu),嚴(yán)蔚敏,吳偉民。北京:清華大學(xué)出版社</p><p> [3] c/c++與數(shù)據(jù)結(jié)構(gòu),棧。王力柱,2
溫馨提示
- 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. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)排序綜合課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)排序綜合課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)排序綜合課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--排序算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---排序綜合
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---希爾排序,冒泡排序,快速排序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--冒泡排序法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--排序算法比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--內(nèi)部排序演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)—綜合排序的設(shè)計(jì)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---幾種排序算法的演示
- 快速排序詳析的設(shè)計(jì)-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--排序算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---撲克牌排序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)---排序算法的實(shí)現(xiàn)
- 拓?fù)渑判?算法與數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì))
- 數(shù)據(jù)結(jié)構(gòu)各種排序算法的課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告
評(píng)論
0/150
提交評(píng)論