版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課程設(shè)計(jì)題目:內(nèi)部排序演示</p><p> 1.問(wèn)題描述----------------------------------------------------1</p><p> 2.需求分析----------------------------------------------------1</p><p> 3.數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)-
2、---------------------------------------------1</p><p> 4.算法設(shè)計(jì)-----------------------------------------------------1</p><p> 1)概要設(shè)計(jì)-------------------------------------------------1</p>
3、<p> 2)詳細(xì)設(shè)計(jì)-------------------------------------------------2</p><p> 5.測(cè)試分析-----------------------------------------------------7</p><p> 6.總結(jié)-------------------------------------------
4、----------------8</p><p> 7.參考文獻(xiàn)---------------------------------------------------9</p><p> 8.附錄:帶注釋的源程序-----------------------------------10</p><p> 1.問(wèn)題描述:隨著計(jì)算機(jī)技術(shù)的發(fā)展,各種排序算法不斷的
5、被提出。排序算法在計(jì)算機(jī)科學(xué)中有非常重要的意義,且應(yīng)用很廣泛。在以后的發(fā)展中排序?qū)ξ覀兊膶W(xué)習(xí)和生活的影響會(huì)逐漸增大,很有必要學(xué)習(xí)排序知識(shí)。此次課程設(shè)計(jì)就是運(yùn)用自己掌握排序的知識(shí),</p><p> 設(shè)計(jì)一個(gè)測(cè)試程序比較幾種排序算法的關(guān)鍵字比較次數(shù)和移動(dòng)次數(shù)以取得直觀感受。</p><p> 2.需求分析:(1)實(shí)現(xiàn)各種內(nèi)部排序。包括直接插入排序,希爾排序,冒泡排序,快速排序,直接選擇排
6、序,歸并排序,堆排序。</p><p> (2)待排序的元素的關(guān)鍵字為整數(shù)或(字符)??捎秒S機(jī)數(shù)據(jù)和用戶輸入數(shù)據(jù)作測(cè)試比較。比較的指標(biāo)為有關(guān)鍵字參加的比較次數(shù)和關(guān)鍵字的移動(dòng)次數(shù)(關(guān)鍵字交換以3次計(jì))。</p><p> (3)演示程序以人機(jī)對(duì)話的形式進(jìn)行。每次測(cè)試完畢顯示各種比較指標(biāo)值的列表,以便比較各種排序的優(yōu)劣。</p><p><b> 3.?dāng)?shù)
7、據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p> struct count</p><p><b> {</b></p><p> int compare ;</p><p> int move ;</p><p><b> };</b></p>&
8、lt;p><b> 4.算法設(shè)計(jì)</b></p><p><b> 1)概要設(shè)計(jì)</b></p><p><b> 主程序:</b></p><p> int main()</p><p><b> {</b></p><
9、;p><b> 初始化;</b></p><p><b> while()</b></p><p><b> {</b></p><p><b> 接受命令;</b></p><p><b> 處理命令;</b><
10、;/p><p><b> 退出;</b></p><p><b> ?。?lt;/b></p><p><b> 2)詳細(xì)設(shè)計(jì)</b></p><p><b> ?。?)冒泡排序</b></p><p> 核心思想:設(shè)排序表中有n個(gè)數(shù)據(jù)
11、元素。首先對(duì)排序表中第一,二個(gè)數(shù)據(jù)元素的關(guān)鍵字array[0]和array[1]進(jìn)行比較。如果前者大于后者,則進(jìn)行交換;然后對(duì)第二,三個(gè)數(shù)據(jù)做同樣的處理;重復(fù)此過(guò)程直到處理完最后兩個(gè)相鄰的數(shù)據(jù)元素。我們稱之為一趟冒泡,它將關(guān)鍵字最大的元素移到排序表的最后一個(gè)位置,其他數(shù)據(jù)元素一般也都向排序的最終位置移動(dòng)。然后進(jìn)行第二趟排序,對(duì)排序表中前n-1個(gè)元素進(jìn)行與上述同樣的操作,其結(jié)果使整個(gè)排序表中關(guān)鍵字次大的數(shù)據(jù)元素被移到arr[n-2]的位置
12、。如此最多做n-1趟冒泡就能把所有數(shù)據(jù)元素排好序。</p><p> 核心代碼:int array_size=0;</p><p> void BubleSort(int array[], int length)</p><p><b> {</b></p><p> BubleSortCount.compare
13、 = 0 ;</p><p> BubleSortCount.move = 0 ;</p><p><b> int tmp;</b></p><p> for(int j = length; j>1; j--)</p><p> for(int i =1;i<j; i++)</p>&
14、lt;p><b> {</b></p><p> BubleSortCount.compare++ ;</p><p> if(array[i-1]>array[i])</p><p><b> {</b></p><p> tmp = array[i-1] ;</p&g
15、t;<p> array[i-1] = array[i];</p><p> array[i] = tmp ;</p><p> BubleSortCount.move++ ;</p><p><b> }</b></p><p><b> }</b></p>
16、<p><b> }</b></p><p><b> ?。?)直接插入排序</b></p><p> 開(kāi)始時(shí)把第一個(gè)數(shù)據(jù)元素作為初始的有序序列,然后從第二個(gè)數(shù)據(jù)元素開(kāi)始依次把數(shù)據(jù)元素按關(guān)鍵字大小插入到已排序的部分排序表的適當(dāng)位置。當(dāng)插入第i(1<i<=n)個(gè)數(shù)據(jù)元素時(shí),前面的i-1個(gè)數(shù)據(jù)元素已經(jīng)排好序,這時(shí),用第i個(gè)數(shù)
17、據(jù)元素的關(guān)鍵字與前面的i-1個(gè)數(shù)據(jù)元素的關(guān)鍵字順序進(jìn)行比較,找到插入位置后就將第i個(gè)數(shù)據(jù)元素插入。如此進(jìn)行n-1次插入,就完成了排序。</p><p> 核心代碼:void InsertSort(int array[], int length)</p><p><b> {</b></p><p> InsertSortCount.com
18、pare = 0 ;</p><p> InsertSortCount.move = 0 ;</p><p><b> int tmp ;</b></p><p> for(int i=1; i<length; i++)</p><p> { tmp = array[i] ;</p>&l
19、t;p> int j = i-1 ;</p><p> InsertSortCount.compare+= i ;</p><p> while((tmp<array[j]&&j!=-1))</p><p><b> {</b></p><p> InsertSortCount.mo
20、ve++ ;</p><p> array[j+1] = array[j] ;</p><p><b> j-- ;</b></p><p><b> }</b></p><p> array[j+1] = tmp ;</p><p><b> }<
21、/b></p><p><b> }</b></p><p><b> (3)簡(jiǎn)單選擇排序</b></p><p> a開(kāi)始時(shí)設(shè)i的初始值為0,如果i<n-1,在數(shù)據(jù)元素序列arr[i]arr[n-1]中,選出具有最小關(guān)鍵字的數(shù)據(jù)元素arr[j];否則算法結(jié)束.若arr[k]不是這組數(shù)據(jù)元素中的第一個(gè)數(shù)據(jù)
22、元素(i≠k),則將arr[j]與arr[i]這兩數(shù)據(jù)元素的位置對(duì)調(diào);令i=i+1轉(zhuǎn)步驟. </p><p> 核心代碼:void SelectedSort(int array[] , int length)</p><p><b> {</b></p><p> SelectedSortCount.compare = 0 ;</p
23、><p> SelectedSortCount.move = 0 ;</p><p><b> int tmp ;</b></p><p><b> int pos ;</b></p><p> for(int i=0; i<length; i++)</p><p>
24、;<b> {</b></p><p> tmp = array[i] ;</p><p><b> pos = i ;</b></p><p> for(int j=i+1; j<length; j++)</p><p><b> {</b></p>
25、;<p> SelectedSortCount.compare++ ;</p><p> if(tmp>array[j])</p><p><b> {</b></p><p> tmp = array[j] ;</p><p><b> pos = j ;</b>&l
26、t;/p><p><b> }</b></p><p><b> }</b></p><p> //SelectedSortCount.compare += (length-i-1;) </p><p> if(pos!=i)</p><p><b> {&
27、lt;/b></p><p> SelectedSortCount.move ++ ;</p><p> int t = array[i] ;</p><p> array[i] = array[tmp] ;</p><p> array[tmp] = t ;</p><p><b> }&l
28、t;/b></p><p><b> }</b></p><p><b> }</b></p><p><b> (4)快速排序</b></p><p> 快速排序(Quick Sort)又被稱做分區(qū)交換排序,這是一種平均性能非常好的排序方法。</p>
29、<p> 其算法基本思想是:任取排序表中的某個(gè)數(shù)據(jù)元素(例如取第一個(gè)數(shù)據(jù)元素)作為基準(zhǔn),按照該數(shù)據(jù)元素的關(guān)鍵字大小,將整個(gè)排序表劃分為左右兩個(gè)子表: 左側(cè)子表中所有數(shù)據(jù)元素的關(guān)鍵字都小于基準(zhǔn)數(shù)據(jù)元素的關(guān)鍵字。右側(cè)子表中所有數(shù)據(jù)元素的關(guān)鍵字都大于或等于基準(zhǔn)數(shù)據(jù)元素的關(guān)鍵字,基準(zhǔn)數(shù)據(jù)元素則排在這兩個(gè)子表中間(這也是該數(shù)據(jù)元素最終應(yīng)安放的位置),然后分別對(duì)這兩個(gè)子表重復(fù)施行上述方法的快速排序,直到所有的子表長(zhǎng)度為1,則排序結(jié)束
30、。</p><p> 核心代碼:void QuickSort(int array[], int length)</p><p><b> {</b></p><p> QuickSortCount.compare = 0 ;</p><p> QuickSortCount.move = 0 ;</p>
31、<p> int low = 0 ;</p><p> int high = length ;</p><p> QuickSort(array, low, high) ;</p><p><b> }</b></p><p> void QuickSort(int array[], int l
32、ow, int high)</p><p><b> {</b></p><p><b> int i,j ;</b></p><p><b> i = low ;</b></p><p> j = high ;</p><p> int te
33、mp ;</p><p> temp = array[low] ;</p><p><b> if(i<j)</b></p><p><b> {</b></p><p> while(i<j)</p><p><b> {</b>
34、</p><p> while(i<j&&temp<array[j])</p><p><b> {</b></p><p> QuickSortCount.compare++ ;</p><p><b> j--;</b></p><p>
35、;<b> }</b></p><p><b> if(i<j)</b></p><p><b> {</b></p><p> QuickSortCount.move++ ;</p><p> int tmp = array[i] ;</p>&
36、lt;p> array[i] = array[j] ;</p><p> array[j] = tmp ;</p><p><b> i++;</b></p><p><b> }</b></p><p> QuickSortCount.compare++ ;</p>
37、<p> while(i<j&&temp>=array[i])</p><p><b> {</b></p><p><b> i++;</b></p><p> QuickSortCount.compare++ ;</p><p><b>
38、 }</b></p><p><b> if(i<j)</b></p><p><b> {</b></p><p> QuickSortCount.move++ ;</p><p> int tmp = array[i] ;</p><p>
39、array[i] = array[j] ;</p><p> array[j] = tmp ;</p><p><b> j--;</b></p><p><b> }</b></p><p> QuickSortCount.compare++ ;</p><p>&
40、lt;b> }</b></p><p> array[i]=temp;//將基準(zhǔn)元素就位</p><p> QuickSort(array, low, i-1);//在左子區(qū)間遞歸進(jìn)行快速排序</p><p> QuickSort(array, i+1, high);//在右子區(qū)間遞歸進(jìn)行快速排序</p><p>
41、<b> }</b></p><p><b> }</b></p><p><b> ?。?)希爾排序</b></p><p> 先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記錄分成d1個(gè)組。所有距離為dl的倍數(shù)的記錄放在同一個(gè)組中。先在各組內(nèi)進(jìn)行直接插入排序;然后,取第二個(gè)增量d2&l
42、t;d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進(jìn)行直接插入排序?yàn)橹埂?lt;/p><p> void ShellSort(int array[],int length)</p><p><b> {</b></p><p> ShellSortCount.
43、compare = 0 ;</p><p> ShellSortCount.move = 0 ;</p><p> int d = length/2; //設(shè)置希爾排序的增量</p><p><b> int i ;</b></p><p><b> int j;</b></p&g
44、t;<p><b> int temp;</b></p><p> while(d>=1)</p><p><b> {</b></p><p> for(i=d;i<length;i++)</p><p><b> {</b></p&
45、gt;<p> temp=array[i];</p><p><b> j=i-d;</b></p><p> ShellSortCount.compare++ ;</p><p> if(j>=0 && array[j]>temp)</p><p><b>
46、 {</b></p><p> array[j+d]=array[j];</p><p><b> j=j-d;</b></p><p> ShellSortCount.move++ ;</p><p><b> }</b></p><p> array
47、[j+d] = temp;</p><p><b> }</b></p><p> d= d/2; //縮小增量</p><p><b> }</b></p><p><b> ?。?)堆排序</b></p><p> a對(duì)排序表中的數(shù)據(jù)元
48、素,利用堆的調(diào)整算法形成初始堆。b.輸出堆頂元素。c.對(duì)剩余元素重新調(diào)整形成堆。d.重復(fù)執(zhí)行第b、c步,直到所有數(shù)據(jù)元素被輸出。</p><p><b> 核心代碼:</b></p><p> (1)建立最大堆的偽代碼如下:</p><p> void filterdown(int array[] ,const int start, in
49、t length)</p><p><b> {</b></p><p> //向下調(diào)整使從start開(kāi)始到currentsize-1為止的子表成為最大堆</p><p> int i=start ;</p><p> int j=2*i+1;//j為i的左孩子</p><p> int
50、 temp=array[i];</p><p> while(j<=length-1)</p><p><b> {</b></p><p> if(j<length-1 && array[j]<array[j+1])</p><p><b> {</b>&
51、lt;/p><p> j++;//在兩個(gè)孩子中選關(guān)鍵字較大者</p><p> HeapSortCount.compare++ ;</p><p><b> }</b></p><p> if(temp>=array[j])</p><p><b> break;</b
52、></p><p><b> else</b></p><p><b> {</b></p><p> array[i]=array[j];</p><p><b> i=j;</b></p><p><b> j=2*j+1;
53、</b></p><p><b> }</b></p><p> HeapSortCount.compare++ ;</p><p><b> }</b></p><p> array[i]=temp;</p><p><b> }</b
54、></p><p><b> (2)堆排序</b></p><p> 如果建立的堆滿足最大堆的條件,則堆的第一個(gè)數(shù)據(jù)元素arr[0]具有最大的關(guān)鍵字,將arr[0]與arr[n-1]對(duì)調(diào),把具有最大關(guān)鍵字的數(shù)據(jù)元素交換到最后,再對(duì)前面的n-1個(gè)數(shù)據(jù)元素使用堆的調(diào)整算法,重新建立最大堆,結(jié)果把具有次最大關(guān)鍵字的數(shù)據(jù)元素又上浮到堆頂,即arr[0]的位置,再對(duì)調(diào)
55、arr[0]和arr[n-2],…,如此反復(fù)執(zhí)行n-1次,最后得到全部排序好的數(shù)據(jù)元素序列。</p><p> void HeapSort(int array[], int length)</p><p><b> {</b></p><p> HeapSortCount.compare = 0 ;</p><p>
56、; HeapSortCount.move = 0 ;</p><p> int len=length;</p><p> for(int j=(len-2)/2;j>=0;j--)</p><p> filterdown(array, j, len ); //初始建堆</p><p> for(int i=len
57、-1;i>=1;i--)</p><p><b> {</b></p><p><b> {</b></p><p><b> int tmp ;</b></p><p> tmp = array[0] ;</p><p> array[
58、0] = array[i] ;</p><p> array[i] = tmp ;</p><p> HeapSortCount.move++ ;</p><p><b> }</b></p><p><b> len--;</b></p><p> filterd
59、own(array, 0, len );//重建最大堆</p><p><b> }</b></p><p><b> }</b></p><p> //FindLittleNumber</p><p> int FindLittle(int array[], int length)<
60、/p><p><b> {</b></p><p> int little;</p><p> little = array[0] ;</p><p> for(int i=1; i<length; i++)</p><p> if(little>array[i])</p&
61、gt;<p> little = array[i];</p><p> return little ;</p><p><b> }</b></p><p><b> 5.測(cè)試分析:</b></p><p> 主界面:
62、 </p><p><b> 生成數(shù)組:</b></p><p><b> 輸出數(shù)組:</b></p><p><b> 進(jìn)行排序方式:</b></p><p><b> 效能分析:</b></p><p>
63、; 6.總結(jié):在進(jìn)行為期兩個(gè)星期的課程設(shè)計(jì)中,最終完成了算法。這期間,遇到的各種麻煩也都相繼解決。從這次實(shí)踐中,我意識(shí)到自己還有很多不足之處。</p><p> 首先先說(shuō)一下基本的。對(duì)于各種排序算法的過(guò)程還是不夠熟悉,進(jìn)行編程時(shí)還需要翻書查找,對(duì)于這一點(diǎn),只能說(shuō)對(duì)數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)還不夠扎實(shí),雖然說(shuō)這門課程以后就沒(méi)有了,但是我想這門課對(duì)以后的學(xué)習(xí)會(huì)有很大幫助,所以有空時(shí)還應(yīng)該繼續(xù)熟悉這門課程。</p>
64、<p> 其次,就是對(duì)于錯(cuò)誤的處理,不能得心應(yīng)手,不能正確處理一些簡(jiǎn)單的錯(cuò)誤。對(duì)于邏輯上的錯(cuò)誤,不能夠立即找到出錯(cuò)點(diǎn),往往需要向同學(xué)請(qǐng)教才能找出錯(cuò)誤,并且改正。我覺(jué)得這是自己獨(dú)自思考能力不高的問(wèn)題,遇事需要自己仔細(xì)想想,若還不能改正,再請(qǐng)教別人也不遲。</p><p> 總而言之,從這次的實(shí)踐中我學(xué)到了很多東西,希望以后能夠多加運(yùn)應(yīng)。 </p><p> 7、參考文獻(xiàn):
65、[1] 朱戰(zhàn)立編著?。?dāng)?shù)據(jù)結(jié)構(gòu) (C語(yǔ)言描述)?。本焊叩冉逃霭嫔?004</p><p> [2] 嚴(yán)蔚敏等編著 .?dāng)?shù)據(jù)結(jié)構(gòu)及應(yīng)用算法教程?。本呵迦A大學(xué)出版社2001</p><p> [3] 陳本林等編著?。?dāng)?shù)據(jù)結(jié)構(gòu).南京:南京大學(xué)出版社,2002</p><p> [4] 趙致琢著?。?jì)算科學(xué)導(dǎo)論 .北京:科學(xué)出版社,2000</p>
66、<p> 8、帶注釋的源程序:</p><p> int main()</p><p><b> {</b></p><p><b> int* a;</b></p><p> int* acopy;</p><p> char ch='y&
67、#39;;</p><p> while(ch=='y')</p><p><b> {</b></p><p> cout<<endl;</p><p> cout<<"\t\t==============內(nèi)部排序的方法演示=============="
68、;<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t\t 1.\t生成數(shù)組"<<endl;</p><p> cout<<"\t\t\t 2.\t輸出數(shù)組"<<endl;</p><
69、p> cout<<"\t\t\t 3.\t進(jìn)行排序方式"<<endl;</p><p> cout<<"\t\t\t 4.\t效能分析"<<endl;</p><p> cout<<"\t\t\t 5.\t退出"<<endl;</p>
70、<p> cout<<endl;</p><p> cout<<"\t\t=============================================="<<endl;</p><p> char select;</p><p> cin>>select;</
71、p><p> switch(select)</p><p><b> {</b></p><p><b> case '1':</b></p><p><b> {</b></p><p> system("cls&quo
72、t;);</p><p> char ch1='0';</p><p> cout<<"\t\t==============內(nèi)部排序的方法演示=============="<<endl;</p><p> cout<<endl;</p><p> cout<
73、<"\t\t\t請(qǐng)輸入創(chuàng)建的數(shù)組的大?。ㄕ麛?shù))"<<endl;</p><p> cin>>array_size ;</p><p> if(array_size>0)</p><p><b> {</b></p><p> a = new int[arra
74、y_size] ;</p><p> acopy = new int[array_size] ;</p><p><b> }</b></p><p> while(ch1!='4')</p><p><b> {</b></p><p> sys
75、tem("cls") ;</p><p> cout<<"\t\t==============內(nèi)部排序的方法演示=============="<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t\t請(qǐng)選擇數(shù)組元素的排列
76、"<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t\t1.\t正序"<<endl;</p><p> cout<<"\t\t\t2.\t逆序"<<endl;</p><p
77、> cout<<"\t\t\t3.\t亂序"<<endl;</p><p> cout<<"\t\t\t4.\t退出"<<endl;</p><p><b> cin>>ch1;</b></p><p> switch(ch1)&l
78、t;/p><p><b> {</b></p><p><b> case '1':</b></p><p><b> {</b></p><p> for(int i=0; i<array_size;i++)</p><p>
79、<b> {</b></p><p><b> *a = i ;</b></p><p> *acopy = i ;</p><p><b> acopy++ ;</b></p><p><b> a++ ;</b></p><
80、;p><b> }</b></p><p> a=a-array_size ;</p><p> acopy = acopy-array_size;</p><p> cout<<"\t\t正序數(shù)組創(chuàng)建成功,按下y鍵回車?yán)^續(xù)"<<endl;</p><p> w
81、hile(getchar()!='y');</p><p><b> }</b></p><p><b> break;</b></p><p><b> case '2':</b></p><p><b> {</b&g
82、t;</p><p> for(int i=array_size; i>=0; i--)</p><p><b> {</b></p><p><b> *a = i ;</b></p><p><b> a++ ;</b></p><p>
83、; *acopy = i ;</p><p><b> acopy++ ;</b></p><p><b> }</b></p><p> acopy = acopy-array_size ;</p><p> a=a-array_size ;</p><p>
84、cout<<"\t\t逆序數(shù)組創(chuàng)建成功,按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getchar()!='y');</p><p><b> }</b></p><p><b> break;</b></p><p&
85、gt;<b> case '3':</b></p><p><b> {</b></p><p> for(int i=0; i<array_size; i++)</p><p><b> {</b></p><p> *a = rand()%1
86、000;</p><p><b> a++ ;</b></p><p> *acopy = rand()%1000; ;</p><p><b> acopy++ ;</b></p><p><b> }</b></p><p> acopy
87、= acopy-array_size ;</p><p> a=a-array_size ;</p><p> cout<<"\t\t亂序數(shù)組創(chuàng)建成功,按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getchar()!='y');</p><p><b&
88、gt; }</b></p><p><b> break;</b></p><p><b> case '4':</b></p><p><b> ch1='4' ;</b></p><p><b> break;
89、</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> c
90、ase '2':</b></p><p><b> {</b></p><p> system("cls");</p><p> cout<<"\t\t==============內(nèi)部排序的方法演示=============="<<endl;<
91、;/p><p> cout<<endl;</p><p> if(array_size==0)</p><p><b> {</b></p><p> cout<<"\t\t\t數(shù)組為空,請(qǐng)創(chuàng)建數(shù)組再試"<<endl;</p><p>
92、 while(getchar()!='y')</p><p><b> ;</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> else</b></p>
93、<p><b> {</b></p><p> system("cls");</p><p> cout<<"\t\t==============內(nèi)部排序的方法演示=============="<<endl;</p><p> cout<<endl
94、;</p><p> cout<<"\t\t1.\t輸出初始數(shù)組"<<endl;</p><p> cout<<"\t\t2.\t輸出排序后的數(shù)組"<<endl;</p><p> char tmp ;</p><p><b> cin&
95、gt;>tmp;</b></p><p> if(tmp=='1')</p><p><b> {</b></p><p> for(int i=0; i<array_size; i++)</p><p> { if((i!=0)&&(i%7==
96、0))</p><p> cout<<endl;</p><p> cout<<'\t'<<*a;</p><p><b> a++ ;</b></p><p><b> }</b></p><p> cout&l
97、t;<endl;</p><p> a = a - array_size ;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getchar()!='y')&l
98、t;/p><p><b> ;</b></p><p><b> }</b></p><p> if(tmp=='2')</p><p><b> {</b></p><p> for(int i=0; i<array_siz
99、e; i++)</p><p><b> {</b></p><p> if((i!=0)&&(i%7==0))</p><p> cout<<endl;</p><p> cout<<'\t'<<*acopy;</p><p
100、><b> acopy++ ;</b></p><p><b> }</b></p><p> cout<<endl;</p><p> acopy = acopy - array_size ;</p><p> cout<<endl;</p>
101、<p> cout<<"\t\t按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getchar()!='y')</p><p><b> ;</b></p><p><b> }</b></p><p>&
102、lt;b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> case '3':</b></p><p><b> {</b></p
103、><p> char ch2 = 'y' ;</p><p> while(ch2=='y'){</p><p> system("cls") ;</p><p> cout<<"\t\t==============內(nèi)部排序的方法演示==============&q
104、uot;<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t\t請(qǐng)選擇排序的方式"<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t\t1.
105、\t冒泡排序"<<endl;</p><p> cout<<"\t\t\t2.\t簡(jiǎn)單選擇排序"<<endl;</p><p> cout<<"\t\t\t3.\t直接插入排序"<<endl;</p><p> cout<<"\t
106、\t\t4.\t快速排序"<<endl;</p><p> cout<<"\t\t\t5.\t希爾排序"<<endl;</p><p> cout<<"\t\t\t6.\t堆排序"<<endl;</p><p> cout<<"\
107、t\t\t7.\t退出"<<endl;</p><p><b> char tmp;</b></p><p><b> cin>>tmp;</b></p><p> switch(tmp)</p><p><b> {</b></
108、p><p><b> case '1':</b></p><p><b> {</b></p><p> system("cls") ;</p><p> cout<<"\t\t==============內(nèi)部排序的方法=========
109、====="<<endl;</p><p> cout<<endl;</p><p> for(int i = 0; i<array_size; i++)</p><p><b> {</b></p><p> *acopy = *a;</p><p&g
110、t;<b> acopy++;</b></p><p><b> a++;</b></p><p><b> }</b></p><p> acopy = acopy - array_size ;</p><p> a = a - array_size ;</p
111、><p> BubleSort(acopy,array_size) ;</p><p> cout<<"\t\t冒泡排序比的較次數(shù)為\t"<<BubleSortCount.compare<<endl;</p><p> cout<<endl;</p><p> cout&
112、lt;<"\t\t冒泡排序的移動(dòng)次數(shù)為\t"<<BubleSortCount.move<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getc
113、har()!='y') ;</p><p><b> }</b></p><p><b> break;</b></p><p><b> case '2':</b></p><p><b> {</b></p
114、><p> system("cls") ;</p><p> cout<<"\t\t==============內(nèi)部排序的方法=============="<<endl;</p><p> cout<<endl;</p><p> for(int i = 0; i
115、<array_size; i++)</p><p><b> {</b></p><p> *acopy = *a;</p><p><b> acopy++;</b></p><p><b> a++;</b></p><p><b
116、> }</b></p><p> acopy = acopy - array_size ;</p><p> a = a - array_size ;</p><p> SelectedSort(acopy,array_size) ;</p><p> cout<<"\t\t簡(jiǎn)單選擇排序比的較
117、次數(shù)為\t"<<SelectedSortCount.compare<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t簡(jiǎn)單選擇排序的移動(dòng)次數(shù)為\t"<<SelectedSortCount.move<<endl;</p><
118、;p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getchar()!='y') ;</p><p><b> }</b></p><p><b
119、> break;</b></p><p><b> case '3':</b></p><p><b> {</b></p><p> system("cls") ;</p><p> cout<<"\t\t===
120、===========內(nèi)部排序的方法=============="<<endl;</p><p> cout<<endl;</p><p> for(int i = 0; i<array_size; i++)</p><p><b> {</b></p><p> *aco
121、py = *a;</p><p><b> acopy++;</b></p><p><b> a++;</b></p><p><b> }</b></p><p> acopy = acopy - array_size ;</p><p>
122、 a = a - array_size ;</p><p> InsertSort(acopy,array_size) ;</p><p> cout<<"\t\t直接插入排序比的較次數(shù)為\t"<<InsertSortCount.compare<<endl;</p><p> cout<<en
123、dl;</p><p> cout<<"\t\t直接插入排序的移動(dòng)次數(shù)為\t"<<InsertSortCount.move<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車?yán)^續(xù)"<<endl
124、;</p><p> while(getchar()!='y') ;</p><p><b> }</b></p><p><b> break;</b></p><p><b> case '4':</b></p><
125、;p><b> {</b></p><p> system("cls") ;</p><p> cout<<"\t\t==============內(nèi)部排序的方法=============="<<endl;</p><p> cout<<endl;</
126、p><p> for(int i = 0; i<array_size; i++)</p><p><b> {</b></p><p> *acopy = *a;</p><p><b> acopy++;</b></p><p><b> a++;&l
127、t;/b></p><p><b> }</b></p><p> acopy = acopy - array_size ;</p><p> a = a - array_size ;</p><p> QuickSort(acopy,array_size) ;</p><p>
128、cout<<"\t\t快速排序比的較次數(shù)為\t"<<QuickSortCount.compare<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t快速排序的移動(dòng)次數(shù)為\t"<<QuickSortCount.move<<
129、;endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getchar()!='y') ;</p><p><b> }</b></
130、p><p><b> break;</b></p><p><b> case '5':</b></p><p><b> {</b></p><p> system("cls") ;</p><p> cout
131、<<"\t\t==============內(nèi)部排序的方法=============="<<endl;</p><p> cout<<endl;</p><p> for(int i = 0; i<array_size; i++)</p><p><b> {</b></p
132、><p> *acopy = *a;</p><p><b> acopy++;</b></p><p><b> a++;</b></p><p><b> }</b></p><p> acopy = acopy - array_size ;&
133、lt;/p><p> a = a - array_size ;</p><p> ShellSort(acopy,array_size) ;</p><p> cout<<"\t\t希爾排序比的較次數(shù)為\t"<<ShellSortCount.compare<<endl;</p><p>
134、; cout<<endl;</p><p> cout<<"\t\t希爾排序的移動(dòng)次數(shù)為\t"<<ShellSortCount.move<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車?yán)^續(xù)&quo
135、t;<<endl;</p><p> while(getchar()!='y') ;</p><p><b> }</b></p><p><b> break ;</b></p><p><b> case '6':</b>
136、</p><p><b> {</b></p><p> system("cls") ;</p><p> cout<<"\t\t==============內(nèi)部排序的方法=============="<<endl;</p><p> cout<
137、;<endl;</p><p> for(int i = 0; i<array_size; i++)</p><p><b> {</b></p><p> *acopy = *a;</p><p><b> acopy++;</b></p><p>&l
138、t;b> a++;</b></p><p><b> }</b></p><p> acopy = acopy - array_size ;</p><p> a = a - array_size ;</p><p> HeapSort(acopy,array_size) ;</p>
139、;<p> cout<<"\t\t堆排序比的較次數(shù)為\t"<<HeapSortCount.compare<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t排序的移動(dòng)次數(shù)為\t"<<HeapSortCount.mo
140、ve<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車?yán)^續(xù)"<<endl;</p><p> while(getchar()!='y') ;</p><p><b> }</b
141、></p><p><b> break ;</b></p><p><b> case '7':</b></p><p> ch2 ='n' ;</p><p><b> break;</b></p><p&g
142、t;<b> }</b></p><p><b> }</b></p><p><b> }</b></p><p><b> break;</b></p><p><b> case '4':</b><
143、;/p><p><b> {</b></p><p> system("cls") ;</p><p> cout<<"\t\t========================統(tǒng)計(jì)次數(shù)========================"<<endl;</p><
144、p> cout<<endl;</p><p> cout<<"\t|排序方式|\t\t|比較次數(shù)|\t\t|移動(dòng)次數(shù)|"<<endl;</p><p> cout<<endl;</p><p> cout<<"\t冒泡排序 \t\t "<&l
145、t;BubleSortCount.compare<<"\t\t "<<BubleSortCount.move<<endl;</p><p> cout<<"\t簡(jiǎn)單選擇排序\t\t "<<SelectedSortCount.compare<<"\t\t "<<Sel
146、ectedSortCount.move<<endl;</p><p> cout<<"\t直接插入排序\t\t "<<InsertSortCount.compare<<"\t\t "<<InsertSortCount.move<<endl;</p><p> cout<
147、;<"\t快速排序 \t\t "<<QuickSortCount.compare<<"\t\t "<<QuickSortCount.move<<endl;</p><p> cout<<"\t希爾排序 \t\t "<<ShellSortCount.compare
148、<<"\t\t "<<ShellSortCount.move<<endl;</p><p> cout<<"\t堆排序 \t\t "<<HeapSortCount.compare<<"\t\t "<<HeapSortCount.move<<en
149、dl;</p><p> cout<<endl;</p><p> cout<<"\t"<<endl;</p><p> cout<<"\t\t\t按y鍵繼續(xù)"<<endl;</p><p> while(getchar()!='
150、;y') ;</p><p><b> }</b></p><p><b> break ;</b></p><p><b> case '5':</b></p><p><b> exit(0);</b></p>
151、;<p><b> break;</b></p><p><b> }</b></p><p> //cout<<"是否繼續(xù),y為繼續(xù),其他退出"<<endl;</p><p> system("cls") ;</p>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(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ì)--排序算法演示系統(tǒng)
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)排序算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--幾種排序算法的演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告---幾種排序算法的演示
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)排序算法演示系統(tǒng)58165
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)----內(nèi)部排序算法性能分析
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--內(nèi)部排序算法的比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--排序算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--排序
- 數(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ù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--內(nèi)部排序算法的性能分析
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)--冒泡排序法
- 數(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ì)---排序算法比較
評(píng)論
0/150
提交評(píng)論