西北工業(yè)大學(xué)程序設(shè)計(jì)大作業(yè).doc
《西北工業(yè)大學(xué)程序設(shè)計(jì)大作業(yè).doc》由會(huì)員分享,可在線閱讀,更多相關(guān)《西北工業(yè)大學(xué)程序設(shè)計(jì)大作業(yè).doc(19頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
學(xué) 院學(xué)院班 級(jí)學(xué) 號(hào)姓 名目錄1 摘要31.1 設(shè)計(jì)題目31.2 設(shè)計(jì)內(nèi)容31.3 開發(fā)工具31.4 應(yīng)用平臺(tái)32 詳細(xì)設(shè)計(jì)32.1 程序結(jié)構(gòu)32.2 主要功能42.3 函數(shù)實(shí)現(xiàn)52.4 開發(fā)日志73 程序調(diào)試及運(yùn)行73.1 程序運(yùn)行結(jié)果73.2 程序使用說明123.3 程序開發(fā)總結(jié)124 附件(源程序)121 摘要1.1 設(shè)計(jì)題目算法型大作業(yè)題目:編寫七種排序算法的演示程序。1.2 設(shè)計(jì)內(nèi)容編寫快速排序、插入排序、選擇排序、冒泡排序、堆排序、歸并排序、基數(shù)排序函數(shù),通過主函數(shù)調(diào)用以實(shí)現(xiàn)七種排序算法的演示。1.3 開發(fā)工具Visual C+ 6.01.4 應(yīng)用平臺(tái)Windows 2000/XP/Vista 32位2 詳細(xì)設(shè)計(jì)2.1 程序結(jié)構(gòu)程序的整體結(jié)構(gòu)與流程見下圖所示。程序運(yùn)行時(shí)在主菜單中輸入序號(hào)選擇排序方法或選擇結(jié)束程序,當(dāng)進(jìn)行某種排序方法后,在主函數(shù)中輸入待排數(shù)據(jù)個(gè)數(shù)和待排數(shù)據(jù),通過調(diào)用對(duì)應(yīng)的排序函數(shù)實(shí)現(xiàn)排序并輸出。該排序結(jié)束后再次進(jìn)入主函數(shù),通過循環(huán)重復(fù)上述操作。其中,主函數(shù)中將數(shù)組地址和待排序數(shù)據(jù)個(gè)數(shù)傳遞給排序函數(shù),在排序函數(shù)中實(shí)現(xiàn)排序功能。輸出排序結(jié)果開始快速插入選擇冒泡堆排歸并基數(shù)選擇排序方法進(jìn)入主菜單退出系統(tǒng)2.2 主要功能函數(shù)的功能為對(duì)快速排序、插入排序、選擇排序、冒泡排序、堆排序、歸并排序、基數(shù)排序算法的演示。主函數(shù):程序運(yùn)行時(shí),可使運(yùn)行者根據(jù)提醒輸入相關(guān)操作,從而進(jìn)入不同的排序方法或者退出??焖倥判蚝瘮?shù):根據(jù)快速排序的算法,最后輸出插入排序函數(shù):根據(jù)插入排序的算法,最后輸出選擇排序函數(shù):根據(jù)選擇排序的算法,最后輸出冒泡排序函數(shù):根據(jù)冒泡排序的算法,最后輸出堆排序函數(shù):根據(jù)堆排序的算法,最后輸出歸并排序函數(shù):根據(jù)歸并排序的算法,最后輸出基數(shù)排序函數(shù):根據(jù)基數(shù)排序的算法,最后輸出2.3 函數(shù)實(shí)現(xiàn)主函數(shù):在主函數(shù)中對(duì)菜單輸出,通過switch語句中的case分支選擇所需要的排序方法;通過while循環(huán)使演示程序在運(yùn)行時(shí)能夠持續(xù)進(jìn)行快速排序: 快速排序(kuaisu)又被稱做分區(qū)交換排序,這是一種平均性能非常好的排序方法。其算法基本思想是:任取排序表中的某個(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é)束。插入排序:插入排序(charu)的基本思想:開始時(shí)把第一個(gè)數(shù)據(jù)元素作為初始的有序序列,然后從第二個(gè)數(shù)據(jù)元素開始依次把數(shù)據(jù)元素按關(guān)鍵字大小插入到已排序的部分排序表的適當(dāng)位置。當(dāng)插入第i(1i=n)個(gè)數(shù)據(jù)元素時(shí),前面的i-1個(gè)數(shù)據(jù)元素已經(jīng)排好序,這時(shí),用第i個(gè)數(shù)據(jù)元素的關(guān)鍵字與前面的i-1個(gè)數(shù)據(jù)元素的關(guān)鍵字順序進(jìn)行比較,找到插入位置后就將第i個(gè)數(shù)據(jù)元素插入。如此進(jìn)行n-1次插入,就完成了排序。以下是在順序表上實(shí)現(xiàn)的直接插入排序在順序表上進(jìn)行直接插入排序時(shí),當(dāng)插入第i(1i=n)個(gè)數(shù)據(jù)元素時(shí),前面的A0、A1、Ai-2已經(jīng)排好序,這時(shí),用Ai-1的關(guān)鍵字依次與Ai-2,Ai-3,的關(guān)鍵字順序進(jìn)行比較,如果這些數(shù)據(jù)元素的關(guān)鍵字大于Ai-1的關(guān)鍵字,則將數(shù)據(jù)元素向后移一個(gè)位置,當(dāng)找到插入位置后就將Ai-1插入,就完成了A0,A1,An-1的排序。選擇排序選擇排序(xuanze)的算法基本思想是:a)開始時(shí)設(shè)i的初始值為0。b)如果i=n,因此在則趟歸并中while循環(huán)不執(zhí)行,只做把temptable.arr中的數(shù)據(jù)元素復(fù)制到table.arr的工作?;鶖?shù)排序:“基數(shù)排序法”(radix sort)則是屬于“分配式排序”(distribution sort),基數(shù)排序法又稱“桶子法”(bucket sort)或bin sort,顧名思義,它是透過鍵值的部份資訊,將要排序的元素分配至某些“桶”中,藉以達(dá)到排序的作用,基數(shù)排序法是屬于穩(wěn)定性的排序,其時(shí)間復(fù)雜度為O (nlog(r)m),其中r為所采取的基數(shù),而m為堆數(shù),在某些時(shí)候,基數(shù)排序法的效率高于其它的比較性排序法。具體可以參看后面的代碼進(jìn)行理解。其它:使用了stdlib頭文件里包含的系統(tǒng)函數(shù),包括清屏函數(shù)和運(yùn)行時(shí)的暫停,增強(qiáng)了程序運(yùn)行時(shí)的效果。2.4 開發(fā)日志在老師布置了大作業(yè)的題目后,我就把題目下載下來并進(jìn)行分析已選擇合適的題目。經(jīng)過我的慎重考慮,選擇了算法型大作業(yè)題目中的編寫七種排序算法的演示程序,覺得自己有能力把這道題目很好完成。在認(rèn)真分析連題目后,基本確定了整體的思路,但是其中有堆排序,歸并排序,基數(shù)排序我沒有在教材中接觸過,于是借助了圖書館和網(wǎng)絡(luò)上的資源,重點(diǎn)對(duì)這三的函數(shù)進(jìn)行編寫。在編寫大作業(yè)過程中大的困難我沒有遇到,只是有些小的疏忽常常導(dǎo)致程序無法運(yùn)行,如形參和實(shí)參的不一致等。我也在其中意識(shí)到對(duì)知識(shí)掌握的不夠熟練,在解決了這些問題后,我覺得自己對(duì)程序的編寫更加熟練了,對(duì)問題的分析也更加嚴(yán)謹(jǐn)了。在C程序設(shè)計(jì)的實(shí)驗(yàn)和理論考試之前代碼已基本完成。在考試結(jié)束后,我又對(duì)程序稍微進(jìn)行了修改,使之運(yùn)行時(shí)效果更好。接著開始寫實(shí)驗(yàn)報(bào)告,整理自己的大作業(yè)。我對(duì)我的作業(yè)是很滿意的。3 程序調(diào)試及運(yùn)行3.1 程序運(yùn)行結(jié)果1.進(jìn)入程序運(yùn)行后所顯示的菜單:2.快速排序:3.插入排序:4.選擇排序:5.冒泡排序:6.堆排序:7.歸并排序:8.基數(shù)排序:9.結(jié)束:3.2 程序使用說明1.打開源程序,調(diào)試完畢后開始運(yùn)行,開始進(jìn)行七種算法的演示;2.按照說明進(jìn)行輸入,選擇數(shù)字17即可進(jìn)入相應(yīng)的排序算法演示程序,選擇8結(jié)束程序;3.選擇排序的方法后,按要求輸入待排數(shù)據(jù)的個(gè)數(shù),然后輸入待排序數(shù)據(jù)即可(數(shù)據(jù)排序結(jié)束后,會(huì)自動(dòng)清屏,進(jìn)入菜單進(jìn)行接下來的選擇);4.應(yīng)當(dāng)注意,本演示程序?qū)?shù)據(jù)進(jìn)行的是升序;3.3 程序開發(fā)總結(jié)在選擇這個(gè)題目時(shí),我覺得難度系數(shù)10對(duì)我有挑戰(zhàn)性,并且我對(duì)排序有相對(duì)比較熟悉,所以就選了這個(gè)題目。但是在編寫過程中卻遇到很多問題。我和我的同學(xué)進(jìn)行了討論,查閱了圖書館和網(wǎng)絡(luò)上的資料,結(jié)合力我個(gè)人對(duì)本題目的理解對(duì)各種問題進(jìn)行了處理,學(xué)到了很多教材上沒有的知識(shí)。從這次實(shí)踐中,我意識(shí)到自己還有很多不足之處。能力也得到了提高。我在進(jìn)行編程時(shí)還需要翻書查找,對(duì)于這一點(diǎn),只能說對(duì)知識(shí)的學(xué)習(xí)還不夠扎實(shí),所以有空時(shí)還應(yīng)該繼續(xù)熟悉這門課程。另外,就是對(duì)于錯(cuò)誤的處理,不能得心應(yīng)手,不能正確處理一些簡(jiǎn)單的錯(cuò)誤。對(duì)于邏輯上的錯(cuò)誤,不能夠立即找到出錯(cuò)點(diǎn),往往需要向同學(xué)請(qǐng)教才能找出錯(cuò)誤,并且改正。我覺得這是自己獨(dú)自思考能力不高的問題,遇事需要自己仔細(xì)想想,若還不能改正,再請(qǐng)教別人也不遲。從總體上說,最終結(jié)果我很滿意,我覺得我所設(shè)計(jì)的程序操作方便,功能良好。我在上面花費(fèi)了很多時(shí)間和精力,對(duì)作業(yè)不斷進(jìn)行修改和完善,我很有成就感 。我的能力在這之中得到了提高。4 附件(源程序)# include# include/*快速排序*/void kuaisu(int A,int n)int i,j,k,t,p;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(AjAk) k=j;t=Ak;Ak=Ai;Ai=t;printf(第%d趟:,i+1);for(p=0;pn;p+)printf(%d ,Ap);printf(n);printf(n排序結(jié)果:);for(i=0;in;i+)printf(%d ,Ai);printf(n);printf(n);system(pause);system(CLS);/*插入排序*/void charu(int A,int n) int i,k,t,j,h=1;for(i=1;in;i+)t=Ai;k=i-1;while(tAk)Ak+1=Ak;k-;if(k=-1)break;printf(第%d趟:,h+);for(j=0;jn;j+)printf(%d ,Aj);printf(n);Ak+1=t;printf(n排序結(jié)果:);for(i=0;in;i+)printf(%d ,Ai);printf(n);printf(n);system(pause);system(CLS);/*選擇排序*/void xuanze(int A,int n) int i,j,k,t,l,h=1;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(AjAk) k=j;if(i!=k)t=Ai;Ai=Ak;Ak=t;printf(第%d趟:,h+);for(l=0;ln;l+)printf(%d ,Al);printf(n);printf(n排序結(jié)果:);for(i=0;in;i+)printf(%d ,Ai);printf(n);printf(n);system(pause);system(CLS);/*冒泡排序*/void maopao(int A,int n) int i,j,t,h=1,p;for(j=0;jn-1;j+)for(i=0;iAi+1)t=Ai,Ai=Ai+1,Ai+1=t,p+;printf(第%d趟:,h+);for(p=0;pn;p+)printf(%d ,Ap);printf(n);printf(n排序結(jié)果:);for(i=0;in;i+)printf(%d ,Ai);printf(n);printf(n);system(pause);system(CLS);/*堆排序*/void shift(int A , int i , int m) int k,t; t=Ai;k=2*i+1; while (km) if(km-1)&(AkAk+1) k+; if(t=0;i-)shift(A,i,n); for (i=n-1;i=1;i-)k=A0;A0=Ai;Ai=k;shift(A,0,i);printf(第%d趟:,h+);for(j=0;jn;j+)printf(%d ,Aj);printf(n);printf(n排序結(jié)果:);for(i=0;in;i+)printf(%d ,Ai);printf(n);printf(n);system(pause);system(CLS);/*歸并排序*/void merge(int number,int first,int last,int mid) int number_temp10=0; int i=first,j=mid+1,k; for(k=0;k=last-first;k+) if (i=mid+1) number_tempk=numberj+; continue; if (j=last+1) number_tempk=numberi+; continue; if (numberinumberj) number_tempk=numberi+; else number_tempk=numberj+; for (i=first,j=0;i=last;i+,j+) numberi = number_tempj;void merge_sort(int number,int first,int last) int mid=0; if(firstlast) mid=(first+last)/2; merge_sort(number,first,mid); merge_sort(number,mid+1,last); merge(number,first,last,mid); void guibing(int a,int n)int i;merge_sort(a,0,n-1);printf(n排序結(jié)果:);for(i=0;in;i+) printf(%d ,ai);printf(n);printf(n);system(pause);system(CLS);/*基數(shù)排序*/void jishu(int data,int n)int temp1010=0; int order10=0; int i,j,k,q,lsd; k=0; q=1; while(q=n) for(i=0;in;i+) lsd=(datai/q)%n); templsdorderlsd=datai; orderlsd+; for(i=0;in;i+) if(orderi != 0) for(j=0;jorderi;j+) datak=tempij; k+; orderi = 0; q *= n; k = 0; printf(n排序結(jié)果:);for(i=0;in;i+)printf(%d ,datai);printf(n);printf(n);system(pause);system(CLS); /*主函數(shù)*/ int main()int A100,p,n,i;while(1)printf(nt* 七種排序算法的演示程序 *n);printf(t* *n);printf(t* 1-快速排序 *n);printf(t* 2-插入排序 *n);printf(t* 3-選擇排序 *n);printf(t* 4-冒泡排序 *n);printf(t* 5- 堆排序 *n);printf(t* 6-歸并排序 *n);printf(t* 7-基數(shù)排序 *n);printf(t* 8-退出程序 *n);printf(t* *n);printf(t*nn);printf(請(qǐng)輸入序號(hào)進(jìn)行選擇:n);scanf(%d,&p);if(p=8)break;printf(請(qǐng)輸入待排序數(shù)的個(gè)數(shù):n);scanf(%d,&n);printf(請(qǐng)輸入待排序數(shù)據(jù):n);for(i=0;in;i+)scanf(%d,&Ai);switch(p)case 1:kuaisu(A,n);break;case 2:charu(A,n);break;case 3:xuanze(A,n);break;case 4:maopao(A,n);break;case 5:duipai(A,n);break;case 6:guibing(A,n);break;case 7:jishu(A,n);break;printf(nntttt謝謝您的使用nn);return 0;Email:chengyunhemail.nwpu.edu.cn19- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
9.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 西北工業(yè)大學(xué) 程序設(shè)計(jì) 作業(yè)
鏈接地址:http://m.italysoccerbets.com/p-6613142.html