【正文】
。n++) { printf(*)。 printf( 快排排序: )。n=f[i]。 printf(\n=====================\n)。 } printf(\n=====================\n)。 for(n=0,i=4。n++) { printf(*)。 printf( 選擇排序: )。 printf(\n★★★★★★移動(dòng)次數(shù)★★★★★★\n)。n=d[i]。 } printf(\n=====================\n)。 for(n=0,i=0。 printf(\n★★★★★★比較次數(shù)★★★★★★\n)。 t5=(double)(end_tstart_t)/CLK_TCK。 MergePass(R1,R,length,n)。 i=i+2*length。 i++。 k++。 C[4]=t4。 BeforeSort()。 return low。} while (lowhighamp。 pivotkey=[low].key。 A[3]=。 mov+=3。i=i+d) { k=i。 B[2]=mov。 ++。i=。 printf(排序用時(shí)為 %f\n,t1)。 if([j].key[j+1].key) { [0].key=[j].key。數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)19 B[0]=mov。 [i].key=[k].key。 for(i=1。 for(i=1。a: printf(請(qǐng)輸入你要輸入的個(gè)數(shù):)。clock_t start_t,end_t。如圖 10 所示??梢詡坞S機(jī)產(chǎn)生不同的數(shù)據(jù),六種內(nèi)部排序算法對(duì)其數(shù)據(jù)進(jìn)行排序,記錄比較次數(shù)、移動(dòng)次數(shù)和排序用時(shí),并用條形圖直觀的表示出不同算法的優(yōu)劣。運(yùn)行結(jié)果:超出范圍重新輸入!說明:不能輸入比 25000 大的數(shù)?;蛘哒f,軟件測(cè)試應(yīng)該根據(jù)軟件開發(fā)各階段的規(guī)格說明和程序的內(nèi)部結(jié)構(gòu)而精心設(shè)計(jì)一批測(cè)試用例(即輸入數(shù)據(jù)及其預(yù)期的輸出結(jié)果) ,并利用這些測(cè)試用例去運(yùn)行程序,以發(fā)現(xiàn)程序錯(cuò)誤或缺陷。其他排序同理YNNYNYn + +n + +圖 9 條形圖模塊數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)125 調(diào)試與測(cè)試 調(diào)試調(diào)試過程主要是運(yùn)行編制好的程序,然后遇到錯(cuò)誤后根據(jù)系統(tǒng)的提示,找到相關(guān)的問題所在。 p r i n t f ( \ n 歸并排序 : * ) 。t 5 = ( d o u b l e ) ( e n d _ t s t a r t _ t ) /C L K _ T C K 。 y d 1 + + 。 y d 1 + + 。YNYNNY圖 7 快速排序模塊數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)10 歸并排序模塊歸并排序模塊可實(shí)現(xiàn)用歸并排序法對(duì)數(shù)據(jù)進(jìn)行排序,該模塊具體實(shí)現(xiàn)程序流程如圖 8 所示。L . e l e m [ l o w ] = L . e l e m [ 0 ] 。 b j 1 + + 。L . e l e m [ 0 ] = L . e l e m [ l o w ] 。t 3 = ( d o u b l e ) ( e n d _ t s t a r t _ t ) /C L K _ T C K 。i ! = k L . e l e m [ 0 ] . k e y = L . e l e m [ i ] . k e y 。w = 1 。e n d _ t = c l o c k ( ) 。L . e l e m [ i ] . k e y L . e l e m [ i 1 ] . k e yj = i 1 。 C [ 1 ] = t 1 。 L . e l e m [ j ] . k e y = L . e l e m [ j + 1 ] . k e y 。結(jié)束YN數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)6圖 3 簡(jiǎn)單選擇模塊 起泡排序模塊起泡排序模塊可實(shí)現(xiàn)運(yùn)用起泡排序法對(duì)數(shù)據(jù)進(jìn)行排序,該模塊具體實(shí)現(xiàn)程序流程如圖 4 所示。 L . e l e m [ i ] . k e y = L . e l e m [ k ] . k e y 。i = 1 。i = 1 。}SqList。(5)希爾排序模塊:運(yùn)用希爾排序法對(duì)偽隨機(jī)產(chǎn)生的數(shù)據(jù)進(jìn)行排序。 (4) 算法設(shè)計(jì):簡(jiǎn)單選擇排序:運(yùn)用順序表。 數(shù)據(jù)需求抽象數(shù)據(jù)類型:線性表、排序算法數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)2 (1) 輸入數(shù)據(jù):需要比較的數(shù)據(jù)數(shù)目(2) 輸出數(shù)據(jù):不同算法的比較次數(shù)、移動(dòng)次數(shù)、排序時(shí)間的數(shù)據(jù)以及對(duì)應(yīng)的條形圖。該程序運(yùn)用了數(shù)據(jù)結(jié)構(gòu)中線性表的順序存儲(chǔ)結(jié)構(gòu)和各種排序算法來共同實(shí)現(xiàn)的。關(guān)鍵詞:內(nèi)部排序、條形圖。 性能需求在運(yùn)行本程序時(shí),只要按照正確的操作方法不會(huì)出現(xiàn)無法運(yùn)行的情況,系統(tǒng)穩(wěn)定性好,安全,可靠,響應(yīng)速度由需比較的數(shù)字?jǐn)?shù)目多少來決定。時(shí)間復(fù)雜度 O(n2),空間復(fù)雜度 O(1)。(6)快速排序:運(yùn)用快速排序法對(duì)偽隨機(jī)產(chǎn)生的數(shù)據(jù)進(jìn)行排序。//分配順序存儲(chǔ)結(jié)構(gòu) 偽隨機(jī)產(chǎn)生數(shù)據(jù)模塊偽隨機(jī)產(chǎn)生數(shù)據(jù)模塊可實(shí)現(xiàn)偽隨機(jī)產(chǎn)生不同數(shù)目的數(shù)據(jù)以供排序,運(yùn)用順序存儲(chǔ)結(jié)構(gòu)來實(shí)現(xiàn)的。i n + 1 。k = i 。 L . e l e m [ k ] . k e y = L . e l e m [ 0 ] . k e y 。開始s t a r t _ t = c l o c k ( ) 。 L . e l e m [ j + 1 ] . k e y = L . e l e m [ 0 ] . k e y 。結(jié)束數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)7 圖 4 起泡排序模塊 直接插入排序模塊直接插入排序模塊可實(shí)現(xiàn)運(yùn)用直接插入排序法對(duì)數(shù)據(jù)進(jìn)行排序,該模塊具體實(shí)現(xiàn)程序流程如圖 5 所示。 c o m + + 。t 2 = ( d o u b l e ) ( e n d _ t s t a r t _ t ) /C L K _ T C K 。i = w 。 L . e l e m [ i ] . k e y = L . e l e m [ k ] . k e y 。A [ 3 ] = c o m 。 y d 1 + + 。 y d 1 + + 。 y d 1 + + 。開始結(jié)束s t a r t _ t = c l o c k ( ) 。 i + + 。 i + + 。輸出 b j 1 ,y d 1 , t 5 圖 8 歸并排序模塊數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)11 條形圖模塊條形圖模塊可用星號(hào)顯示出各種算法排序的比較結(jié)果,該模塊具體實(shí)現(xiàn)程序流程如圖 9 所示。 p r i n t f ( 選擇排序 : ) 。本系統(tǒng)調(diào)試過程中遇到的主要問題、原因和解決方法如下面介紹。過度測(cè)試則會(huì)浪費(fèi)許多寶貴的資源。(2)輸出功能測(cè)試輸入數(shù)據(jù) 1:200預(yù)期結(jié)果:輸出各排序算法的比較次數(shù)、移動(dòng)次數(shù)和排序用時(shí),隨后輸出數(shù)據(jù)比較所對(duì)應(yīng)的條形圖。不過本程序還可以添加細(xì)節(jié),例如:可輸出個(gè)選擇排序方法的菜單,挑選不同排序方法對(duì)數(shù)據(jù)進(jìn)行比較,也可以再循環(huán)選擇并用條形圖表示出來。圖 10 顯示比較結(jié)果界面顯示比較次數(shù)的條形圖。typedef struct { int key。 scanf(%d,amp。in+1。i。 [k].key=[0].key。 C[0]=t0。 [j].key=[j+1].key。 A[1]=。i++) { if([i].key[i1].key) { [0].key=[i].key。 } [j+1].key=[0].key。 C[2]=t2。 for(j=i+d。 } w++。 B[3]=mov。 while (lowhigh) { yd1++。amp。}void QSort(SqList amp。 QSort(L,1,)。}void Merge(ElemType R[],ElemType R1[],int low,int m,int high) //歸并排序{ int i=low, j=m+1, k=low。 } else { bj1++。 k++。 } if(i+length1n1) Merge(R,R1,i,i+length1,n1)。 length=2*length。 printf(排序用時(shí)為 %f\n,t5)。printf(\n=====================\n)。n=d[i]。 printf( 直插排序: )。n++) {數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)27 printf(*)。 printf(\n=====================\n)。 for(n=0,i