版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 課程設(shè)計題目:內(nèi)部排序演示</p><p> 1.問題描述----------------------------------------------------1</p><p> 2.需求分析----------------------------------------------------1</p><p> 3.數(shù)據(jù)結(jié)構(gòu)設(shè)計-
2、---------------------------------------------1</p><p> 4.算法設(shè)計-----------------------------------------------------1</p><p> 1)概要設(shè)計-------------------------------------------------1</p>
3、<p> 2)詳細設(shè)計-------------------------------------------------2</p><p> 5.測試分析-----------------------------------------------------7</p><p> 6.總結(jié)-------------------------------------------
4、----------------8</p><p> 7.參考文獻---------------------------------------------------9</p><p> 8.附錄:帶注釋的源程序-----------------------------------10</p><p> 1.問題描述:隨著計算機技術(shù)的發(fā)展,各種排序算法不斷的
5、被提出。排序算法在計算機科學(xué)中有非常重要的意義,且應(yīng)用很廣泛。在以后的發(fā)展中排序?qū)ξ覀兊膶W(xué)習(xí)和生活的影響會逐漸增大,很有必要學(xué)習(xí)排序知識。此次課程設(shè)計就是運用自己掌握排序的知識,</p><p> 設(shè)計一個測試程序比較幾種排序算法的關(guān)鍵字比較次數(shù)和移動次數(shù)以取得直觀感受。</p><p> 2.需求分析:(1)實現(xiàn)各種內(nèi)部排序。包括直接插入排序,希爾排序,冒泡排序,快速排序,直接選擇排
6、序,歸并排序,堆排序。</p><p> ?。?)待排序的元素的關(guān)鍵字為整數(shù)或(字符)??捎秒S機數(shù)據(jù)和用戶輸入數(shù)據(jù)作測試比較。比較的指標為有關(guān)鍵字參加的比較次數(shù)和關(guān)鍵字的移動次數(shù)(關(guān)鍵字交換以3次計)。</p><p> ?。?)演示程序以人機對話的形式進行。每次測試完畢顯示各種比較指標值的列表,以便比較各種排序的優(yōu)劣。</p><p><b> 3.數(shù)
7、據(jù)結(jié)構(gòu)設(shè)計</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è)計</b></p><p><b> 1)概要設(shè)計</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)詳細設(shè)計</b></p><p><b> (1)冒泡排序</b></p><p> 核心思想:設(shè)排序表中有n個數(shù)據(jù)
11、元素。首先對排序表中第一,二個數(shù)據(jù)元素的關(guān)鍵字array[0]和array[1]進行比較。如果前者大于后者,則進行交換;然后對第二,三個數(shù)據(jù)做同樣的處理;重復(fù)此過程直到處理完最后兩個相鄰的數(shù)據(jù)元素。我們稱之為一趟冒泡,它將關(guān)鍵字最大的元素移到排序表的最后一個位置,其他數(shù)據(jù)元素一般也都向排序的最終位置移動。然后進行第二趟排序,對排序表中前n-1個元素進行與上述同樣的操作,其結(jié)果使整個排序表中關(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> 開始時把第一個數(shù)據(jù)元素作為初始的有序序列,然后從第二個數(shù)據(jù)元素開始依次把數(shù)據(jù)元素按關(guān)鍵字大小插入到已排序的部分排序表的適當位置。當插入第i(1<i<=n)個數(shù)據(jù)元素時,前面的i-1個數(shù)據(jù)元素已經(jīng)排好序,這時,用第i個數(shù)
17、據(jù)元素的關(guān)鍵字與前面的i-1個數(shù)據(jù)元素的關(guān)鍵字順序進行比較,找到插入位置后就將第i個數(shù)據(jù)元素插入。如此進行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> ?。?)簡單選擇排序</b></p><p> a開始時設(shè)i的初始值為0,如果i<n-1,在數(shù)據(jù)元素序列arr[i]arr[n-1]中,選出具有最小關(guān)鍵字的數(shù)據(jù)元素arr[j];否則算法結(jié)束.若arr[k]不是這組數(shù)據(jù)元素中的第一個數(shù)據(jù)
22、元素(i≠k),則將arr[j]與arr[i]這兩數(shù)據(jù)元素的位置對調(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> 其算法基本思想是:任取排序表中的某個數(shù)據(jù)元素(例如取第一個數(shù)據(jù)元素)作為基準,按照該數(shù)據(jù)元素的關(guān)鍵字大小,將整個排序表劃分為左右兩個子表: 左側(cè)子表中所有數(shù)據(jù)元素的關(guān)鍵字都小于基準數(shù)據(jù)元素的關(guān)鍵字。右側(cè)子表中所有數(shù)據(jù)元素的關(guān)鍵字都大于或等于基準數(shù)據(jù)元素的關(guān)鍵字,基準數(shù)據(jù)元素則排在這兩個子表中間(這也是該數(shù)據(jù)元素最終應(yīng)安放的位置),然后分別對這兩個子表重復(fù)施行上述方法的快速排序,直到所有的子表長度為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;//將基準元素就位</p><p> QuickSort(array, low, i-1);//在左子區(qū)間遞歸進行快速排序</p><p> QuickSort(array, i+1, high);//在右子區(qū)間遞歸進行快速排序</p><p>
41、<b> }</b></p><p><b> }</b></p><p><b> ?。?)希爾排序</b></p><p> 先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為dl的倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進行直接插入排序;然后,取第二個增量d2&l
42、t;d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。</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> (6)堆排序</b></p><p> a對排序表中的數(shù)據(jù)元
48、素,利用堆的調(diào)整算法形成初始堆。b.輸出堆頂元素。c.對剩余元素重新調(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開始到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++;//在兩個孩子中選關(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> 如果建立的堆滿足最大堆的條件,則堆的第一個數(shù)據(jù)元素arr[0]具有最大的關(guān)鍵字,將arr[0]與arr[n-1]對調(diào),把具有最大關(guān)鍵字的數(shù)據(jù)元素交換到最后,再對前面的n-1個數(shù)據(jù)元素使用堆的調(diào)整算法,重新建立最大堆,結(jié)果把具有次最大關(guān)鍵字的數(shù)據(jù)元素又上浮到堆頂,即arr[0]的位置,再對調(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.測試分析:</b></p><p> 主界面:
62、 </p><p><b> 生成數(shù)組:</b></p><p><b> 輸出數(shù)組:</b></p><p><b> 進行排序方式:</b></p><p><b> 效能分析:</b></p><p>
63、; 6.總結(jié):在進行為期兩個星期的課程設(shè)計中,最終完成了算法。這期間,遇到的各種麻煩也都相繼解決。從這次實踐中,我意識到自己還有很多不足之處。</p><p> 首先先說一下基本的。對于各種排序算法的過程還是不夠熟悉,進行編程時還需要翻書查找,對于這一點,只能說對數(shù)據(jù)結(jié)構(gòu)的學(xué)習(xí)還不夠扎實,雖然說這門課程以后就沒有了,但是我想這門課對以后的學(xué)習(xí)會有很大幫助,所以有空時還應(yīng)該繼續(xù)熟悉這門課程。</p>
64、<p> 其次,就是對于錯誤的處理,不能得心應(yīng)手,不能正確處理一些簡單的錯誤。對于邏輯上的錯誤,不能夠立即找到出錯點,往往需要向同學(xué)請教才能找出錯誤,并且改正。我覺得這是自己獨自思考能力不高的問題,遇事需要自己仔細想想,若還不能改正,再請教別人也不遲。</p><p> 總而言之,從這次的實踐中我學(xué)到了很多東西,希望以后能夠多加運應(yīng)。 </p><p> 7、參考文獻:
65、[1] 朱戰(zhàn)立編著?。當?shù)據(jù)結(jié)構(gòu) (C語言描述)?。本焊叩冉逃霭嫔?004</p><p> [2] 嚴蔚敏等編著 .數(shù)據(jù)結(jié)構(gòu)及應(yīng)用算法教程 .北京:清華大學(xué)出版社2001</p><p> [3] 陳本林等編著?。當?shù)據(jù)結(jié)構(gòu).南京:南京大學(xué)出版社,2002</p><p> [4] 趙致琢著?。嬎憧茖W(xué)導(dǎo)論?。本嚎茖W(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進行排序方式"<<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請輸入創(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請選擇數(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鍵回車繼續(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鍵回車繼續(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鍵回車繼續(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ù)組為空,請創(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鍵回車繼續(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鍵回車繼續(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請選擇排序的方式"<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t\t1.
105、\t冒泡排序"<<endl;</p><p> cout<<"\t\t\t2.\t簡單選擇排序"<<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冒泡排序的移動次數(shù)為\t"<<BubleSortCount.move<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車繼續(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簡單選擇排序比的較
117、次數(shù)為\t"<<SelectedSortCount.compare<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t簡單選擇排序的移動次數(shù)為\t"<<SelectedSortCount.move<<endl;</p><
118、;p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車繼續(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直接插入排序的移動次數(shù)為\t"<<InsertSortCount.move<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車繼續(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快速排序的移動次數(shù)為\t"<<QuickSortCount.move<<
129、;endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車繼續(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希爾排序的移動次數(shù)為\t"<<ShellSortCount.move<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車繼續(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排序的移動次數(shù)為\t"<<HeapSortCount.mo
140、ve<<endl;</p><p> cout<<endl;</p><p> cout<<"\t\t按下y鍵回車繼續(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)計次數(shù)========================"<<endl;</p><
144、p> cout<<endl;</p><p> cout<<"\t|排序方式|\t\t|比較次數(shù)|\t\t|移動次數(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簡單選擇排序\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. 本站所有資源如無特殊說明,都需要本地電腦安裝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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法演示系統(tǒng)
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計排序算法演示系統(tǒng)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--幾種排序算法的演示
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告---幾種排序算法的演示
- 大數(shù)據(jù)結(jié)構(gòu)課程設(shè)計排序算法演示系統(tǒng)58165
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計----內(nèi)部排序算法性能分析
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--內(nèi)部排序算法的比較
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-拓撲排序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--排序算法
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--排序
- 數(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è)計---希爾排序,冒泡排序,快速排序
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計報告--內(nèi)部排序算法的性能分析
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計--冒泡排序法
- 數(shù)據(jù)結(jié)構(gòu)排序綜合課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)排序綜合課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)排序綜合課程設(shè)計報告
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計---排序算法比較
評論
0/150
提交評論