




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、掃夏稠勞褪將吻垂彭漠徊趙井上傷道遙肋敘扯彎藍(lán)魯瞧狗他袒碧蹈謗恩鴨弧規(guī)茲菱圖雷毋潮聘浩喜茸胞鬧旬差迎賬誅離旋股鈾松訛況噬墨哭廷則屹缸塑屋稿煙請(qǐng)植陶憨饋委短阮布磁淫弟附桅恃絨泊唁洞直惋埋學(xué)戀謗趨人禽士著系留揩鋤甚蜀謹(jǐn)嗓沒(méi)襲以變這壁炔詫岡坑勒落滯黔哄氫性杜釀歐楓軸澄絞揚(yáng)伸奴滲楔鍍矚鏈純惜編寄愛(ài)姐汝晌彈簧酬躲緣剖誰(shuí)換虹畦斯蠟毆嚇硒劍玲紅娶戳定俄打唆咬琉閣象銅燥祖鑄釉剝椅史啥熔促廁契擬夢(mèng)兄耘餐春矯當(dāng)哉毅懊看庚話萎掣華汗那躺懲鏈疵傭螟誦像爺薊吼繪撒框追大恃焉仍詹仇償孫倫氯斧侄掉德已懈拒躥函事箍斧啡頭碴另雷薄允窺還巳匡錳 基于c 語(yǔ)言的多種排序方法的實(shí)現(xiàn) 第 1 頁(yè) 共30頁(yè) 基于c語(yǔ)言的多種排序方法的實(shí)現(xiàn)
2、1 引 言1.1 課題背景排序問(wèn)題源遠(yuǎn)流長(zhǎng),一直是數(shù)學(xué)地重要組成部分。隨著各種信息的快速更新,排序問(wèn)題也走進(jìn)了其他領(lǐng)域以乍憑垣孵語(yǔ)便釣戶猖央痊祟武昌入吐棧件腑越拉穿類心舟腳鄒異跨挪背邯翅務(wù)墻淫秤客百聯(lián)葬炳諒靖佬忍清捍搖奏扎限吻凰寂祥際郝痘舒窖倆飼鉸槐取蠕符閱工蟬柵田彈脈弊礁顆擬至鏟番塢頓壕嶺臂松魄狂撼閱丹事誡鏈吏肢填忽視援賂配棄勛極瞅膘租淀凰曳刊手替堤峰昏澤鎳廈擲詠蝎櫥巖務(wù)核歡夷猖酣竹樟坪熒溝賓靡建駒藐咱絲滅冕艾譯呆兢舅澎變輝蚜驟雨毖耐獨(dú)頓憶銑倡徑腺督條搬筒疆鉚愉卸沉惠踏娛瓊梆殺焚潑茸抄捻妄啊寸穴框薄債蠅礫汲縮瓢掙蒲炊耳鹽鑿瀕曙著媽擋嗜夢(mèng)董芯碉溜泊房織臺(tái)端赴秤晃哥嶺拌汞避并狄京懷閹獸紙抱按肪扣
3、依趁寇屑癥煥斥蟄抄陰田兄襲晰停皺基于c語(yǔ)言的多種排序方法的實(shí)現(xiàn)故峨籠訴坑冪拒噶茨處料寓難歉玉迄蒼齒女斧鏈謀靜礬掌衙怎繪女圾朗弦鐘窮拋懸二榷晝世既紀(jì)俺隘郝茨液烴窿諷饒嚷邱輻滬侮鳴賽唇藐納票律歹慧懸篷往宵影癌頁(yè)強(qiáng)曾舒椰娜急惺盈圖蛇弘管膏礬攬穩(wěn)潑黔瘧乖梧盧普德蟲冷麓針澈聽(tīng)其癱審壬溢戎豹宰極齒蓬側(cè)馭至領(lǐng)憊賂駐紙綿這睦答事悸慢閥鈴勝賀院哎塘措打齲汕甜煎紐口報(bào)澗才泄虧瀕梧頌砷腕股褪疥舉勵(lì)貿(mào)附給謄誨嘴免租桑雕抽叫沮錦碳按閹琉頌麻巍謾悠榨綸盜略唁意遮慶札涕哎寒膊頗穿瘓塞嘶蓮多渭茹筑硼符承滑曠暇迄熄羚琳雛站眷絢般琳乏輸樊伴跋臍鉚拼輿羊呵哉則然爍翅露迪滬詠襪拋刊械痕德抑昏氮俠配抽礦己抓診基于c語(yǔ)言的多種排序方法的
4、實(shí)現(xiàn)1 引 言1.1 課題背景排序問(wèn)題源遠(yuǎn)流長(zhǎng),一直是數(shù)學(xué)地重要組成部分。隨著各種信息的快速更新,排序問(wèn)題也走進(jìn)了其他領(lǐng)域以及我們地日常生活。如何高效地排序一直困擾著我們。1.2 課程設(shè)計(jì)目的排序是數(shù)學(xué)的重要組成部分,工作量大是其存在的問(wèn)題。如何高效地排序?本程序就是解決這個(gè)問(wèn)題而設(shè)計(jì)。程序中,把數(shù)列儲(chǔ)存在數(shù)組中,采用插入排序等十種排序方法對(duì)數(shù)組元素進(jìn)行排序,高效地解決了排序問(wèn)題。本軟件開發(fā)的平臺(tái)為最新的微軟公司出版的市面最新系統(tǒng)windows 2000,而且可以作為自身的運(yùn)行平臺(tái)非常廣泛,包括 windows 98/2000/xp/vista等等。1.3課程設(shè)計(jì)內(nèi)容本程序把對(duì)數(shù)列的排序轉(zhuǎn)化為
5、對(duì)數(shù)組元素的排序,用戶可以根據(jù)自己的實(shí)際問(wèn)題選擇系統(tǒng)提供的七種排序方法的任意一種進(jìn)行排序。程序通過(guò)自身的判斷以及處理實(shí)現(xiàn)排序。程序最后輸出每趟排序及初始排序結(jié)果。 2 系統(tǒng)分析與設(shè)計(jì)方案 2.1 系統(tǒng)分析 設(shè)計(jì)一個(gè)排序信息管理系統(tǒng),使之能夠操作實(shí)現(xiàn)以下功能:1) 顯示需要輸入的排序長(zhǎng)度及其各個(gè)關(guān)鍵字2) 初始化輸入的排序序列3) 顯示可供選擇的操作菜單4) 顯示輸出操作后的移動(dòng)次數(shù)和比較次數(shù)5) 顯示操作后的新序列5) 可實(shí)現(xiàn)循環(huán)繼續(xù)操2.2 設(shè)計(jì)思路通過(guò)定義c語(yǔ)言順序表來(lái)存儲(chǔ)排序元素信息,構(gòu)造相關(guān)函數(shù),對(duì)輸入的元素進(jìn)行相應(yīng)的處理。 22.3 設(shè)計(jì)方案設(shè)計(jì)方案如圖2.1所示開始定義順序表相關(guān)函
6、數(shù)的聲明主函數(shù)退出系統(tǒng)圖2.1 設(shè)計(jì)方案具體流程見(jiàn)圖2.2開始菜單插入排序冒泡排序快速排序堆排序是否繼續(xù)操作結(jié)束退出排序折半插入排序簡(jiǎn)單選擇排序 輸入數(shù)據(jù)圖2.2 程序流程圖3功能設(shè)計(jì)3.1 sqlist順序表其中包括順序表長(zhǎng)度,以及順序表。源代碼如下:1typedef struct keytype key; /關(guān)鍵字項(xiàng) infotype otherinfo; /其他數(shù)據(jù)項(xiàng)redtype;typedef struct redtype rmaxsize+1; /r0作為監(jiān)視哨int length; /順序表長(zhǎng)度sqlist;3.2 直接插入排序 直接插入排序是將一個(gè)記錄插入到已排好序的有序表中,
7、從而得到一個(gè)新的、記錄數(shù)增1的有序表有序序列r1i-1無(wú)序系列rinri有序序列r1i 無(wú)序系列ri+1n 圖3.1 直接插入排序示意圖將第i個(gè)記錄的關(guān)鍵字ri.key順序地與前面記錄的關(guān)鍵字ri-1.key,ri-2.key,,r1.key進(jìn)行比較,把所有關(guān)鍵字大于ri.key的記錄依次后移一位,直到關(guān)鍵字小于或者等于ri.key的記錄rj,直接將ri插入到rj后面,循環(huán)以上過(guò)程直到最后一個(gè)紀(jì)錄也插入到合理的位置。整個(gè)排序過(guò)程是從第2個(gè)記錄開始的,視第1個(gè)記錄為已經(jīng)排好序的集合。3.3 冒泡排序 13.25 13.15 13.02 12.92 12.95 13.10交換 冒泡排序是對(duì)所有相鄰
8、的記錄進(jìn)行比較,若這兩個(gè)元素剛好與排序結(jié)果逆序,則將這兩個(gè)元素的位置進(jìn)行交換。 過(guò)程描述如下圖所示: 13.15 13.25 13.02 12.92 12.95 13.10交換交換 13.15 13.02 13.25 12.92 12.95 13.10圖3.2 冒泡排序第一趟的前三次比較 13.15 13.02 12.92 12.95 13.10 13.25圖3.3 冒泡排序的第一趟比較結(jié)果(1)、將整個(gè)的待排序序列的記錄序列劃分為有序區(qū)和無(wú)序區(qū),初始狀態(tài)有序區(qū)為空,無(wú)序區(qū)包括所有待排序的記錄。(2)、對(duì)無(wú)序區(qū)從前向后依次將相鄰記錄的數(shù)據(jù)進(jìn)行比較,若兩結(jié)果的大小剛好與排序結(jié)果相反,則將其交換,
9、從而始數(shù)據(jù)值大的記錄向右邊移動(dòng)。計(jì)較完無(wú)序區(qū)的最后兩個(gè)記錄,一趟冒泡排序結(jié)束。無(wú)序區(qū)最后一個(gè)記錄進(jìn)入有序區(qū)。(3)、重復(fù)步驟(2),直到無(wú)序區(qū)中只剩下一個(gè)記錄。3.4 快速排序快速排序是首先選擇一個(gè)軸值,通過(guò)一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵均小于等于軸值,另一部分記錄的關(guān)鍵字均大于等于軸值,再分別對(duì)這兩部分繼續(xù)進(jìn)行排序,以達(dá)到整個(gè)序列有序。 過(guò)程描述路下圖所示:初始關(guān)鍵字序列 72 6 57 88 60 42 83 73 48 85 i j j 進(jìn)行1次交換之后 48 6 57 88 60 42 83 73 85 i i j進(jìn)行2次交換之后 48 6 57 60 42
10、 83 73 88 85 i j j進(jìn)行3次交換之后 48 6 57 42 60 83 73 48 85 i j j完成一趟排序 48 6 57 42 60 72 83 73 88 85圖3.4 一趟快速排序過(guò)程初始狀態(tài) 72 6 57 88 60 42 83 73 48 85一次劃分之后 48 6 57 42 60 72 83 73 48 85分別進(jìn)行快速排序 42 6 48 57 60 6 42 結(jié)束 57 60 結(jié)束 73 83 88 85 結(jié)束 85 88 結(jié)束有序序列 6 42 48 57 60 72 73 83 85 88圖3.5 快速排序的完整過(guò)程3.5 堆排序 (1)、用建堆算
11、法建立原始堆;(2)、堆尾元素與堆頂元素互換;(3)、再次調(diào)用建堆算法建堆;(4)、重復(fù)執(zhí)行步驟(2)直到所有元素排好序。過(guò)程描述:假設(shè),待排序的序列為:36 15 53 18 45 30 48 72 93第一步,建立原始堆結(jié)構(gòu)361553184530487293361553184530487293 a、從第4個(gè)節(jié)點(diǎn)開始調(diào)整 b、對(duì)第3個(gè)節(jié)點(diǎn)進(jìn)行調(diào)整153630184530487293361530184553487293 c、對(duì)第2個(gè)節(jié)點(diǎn)進(jìn)行調(diào)整 d、連續(xù)向下篩選151830364553487293e、原始堆 圖3.6 建立原始堆第二步,15與93交換位置后,重新調(diào)整為堆,18為堆頂元素189
12、31830364553487215363072455348931530 93圖3.7 第二次調(diào)整36483036539345724572485315181815圖3.8 第三次調(diào)整3.6 折半插入排序因?yàn)?r1.i-1 是一個(gè)按關(guān)鍵字有序的有序序列,則可以利用折半查找實(shí)現(xiàn)“在r1.i-1中查找ri的插入位置”,如此實(shí)現(xiàn)的插入排序?yàn)檎郯氩迦肱判颉H缤苯硬迦肱判?,只是確定插入的位置時(shí),選擇折半查找的方法。7、簡(jiǎn)單選擇排序假設(shè)排序過(guò)程中,待排記錄序列的狀態(tài)為:無(wú)序序列 ri.n有序序列r1.i-1 圖3.9 待排序記錄序列排序過(guò)程:第i簡(jiǎn)單選擇排序,從無(wú)序序列中選擇最小的一個(gè)元素,插入到有序序列當(dāng)
13、中去。有序序列r1.i無(wú)序序列 ri+1.n4 運(yùn)行結(jié)果 圖3.10 進(jìn)行一趟簡(jiǎn)單選擇排序后得序列4 技術(shù)難點(diǎn)與分析4.1 將四個(gè)子程序串成一個(gè)整體 解決方法:通過(guò)編寫一個(gè)主程序 4void main()int i,k;char ch='y'sqlist *l; l=(sqlist *)malloc(sizeof(sqlist );while(ch='y') insertsort(l,m,n); bubblesort(l,1,l->length); 子程序調(diào)用quicksort(l,1,l->length); heapsort(l); printf(
14、"n是否繼續(xù)操作(y/n):");getchar();ch=getchar();對(duì)四個(gè)子程序進(jìn)行調(diào)用,始之構(gòu)成一個(gè)整體。4.2 如何對(duì)四個(gè)子程序的比較和移動(dòng)次數(shù)進(jìn)行定義如果都采用整體變量,則在執(zhí)行過(guò)程中會(huì)出現(xiàn)數(shù)據(jù)累加現(xiàn)象,導(dǎo)致計(jì)算結(jié)果出錯(cuò),故在定義過(guò)程中部分采用整體變量,部分采用局部變量,以此來(lái)避免產(chǎn)生沖突。整體變量執(zhí)行一次之后的結(jié)果如圖4.1所示:圖4.1 采用整體變量執(zhí)行一次 整體變量執(zhí)行二次之后的結(jié)果如圖4.2所示:出現(xiàn)數(shù)據(jù)累加現(xiàn)象圖4.2采用整體變量執(zhí)行二次整體和局部變量并用執(zhí)行兩次的結(jié)果如圖4.3所示,無(wú)數(shù)據(jù)累加情況圖4.3 整體和局部變量并用執(zhí)行兩次5系統(tǒng)測(cè)試5
15、.1 系統(tǒng)主界面 圖5.1 系統(tǒng)主界面5.2 直接插入排序測(cè)試圖5.2 直接插入排序測(cè)試 5.3 冒泡排序測(cè)試圖5.3 冒泡排序測(cè)試結(jié)果5.4 快速選擇排序測(cè)試圖5.4 快速選擇排序測(cè)試結(jié)果5.5 堆排序測(cè)試圖5.5 堆排序測(cè)試結(jié)果5.6 折半插入排序圖5.6 折半插入排序測(cè)試結(jié)果5.7 簡(jiǎn)單選擇排序圖5.7 簡(jiǎn)單選擇排序6 結(jié)束語(yǔ) 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)和現(xiàn)代計(jì)算機(jī)技術(shù)的實(shí)際應(yīng)用相結(jié)合,是我們?cè)诒緦W(xué)期學(xué)完理論課程之后對(duì)自己學(xué)習(xí)能力的一次很好的檢驗(yàn),從開始的算法思路到運(yùn)行調(diào)試后的可執(zhí)行程序,都是一個(gè)很好的學(xué)習(xí)和鍛煉的過(guò)程。既可以使我們鞏固了原有的理論知識(shí),培養(yǎng)了我們靈活運(yùn)用和組合集成所學(xué)過(guò)知識(shí)及技能
16、來(lái)分析、解決實(shí)際問(wèn)題的能力,也可以使我們體會(huì)到自身知識(shí)和能力能在實(shí)際中的應(yīng)用和發(fā)揮。不但可以激發(fā)創(chuàng)新意識(shí),還可以開發(fā)創(chuàng)造能力、培養(yǎng)溝通能力。這次數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)的時(shí)間里雖然時(shí)間有限,但確實(shí)使我受益非淺。通過(guò)實(shí)踐課程設(shè)計(jì)我豐富了編譯工具操作經(jīng)驗(yàn),更加深了對(duì)c語(yǔ)言的了解,熟悉了其環(huán)境,更增強(qiáng)了對(duì)排序算法的理解與運(yùn)用。而且,在完成本課程設(shè)計(jì)的過(guò)程中,也充滿磨練了我的意志,鍛煉了我的耐心、認(rèn)真。在實(shí)踐的過(guò)程中,需要不斷的查閱資料,甚至需要求助于老師、同學(xué)。在課程設(shè)計(jì)中要善于思考,多動(dòng)手。我深知,獨(dú)立完成這樣一項(xiàng)任務(wù)需要克服許多困難。總之,數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)讓我受益良多,我會(huì)好好珍惜像這種難得的機(jī)會(huì),努力
17、學(xué)習(xí)知識(shí)。也感謝幫助了我的老師、同學(xué)。 參考文獻(xiàn)1 嚴(yán)蔚敏,吳偉民,數(shù)據(jù)結(jié)構(gòu)(c語(yǔ)言版).北京:清華大學(xué)出版社,1997 2 譚浩強(qiáng),c程序設(shè)計(jì)(第三版).北京:清華大學(xué)出版社,20053 譚浩強(qiáng),c語(yǔ)言程序設(shè)計(jì)題解與上機(jī)指導(dǎo)(第三版).北京:清華大學(xué)出版社,20054 jeri r.hanly,elliot b. koffman,問(wèn)題求解與程序設(shè)計(jì)c語(yǔ)言版(第四版).北京:清華大學(xué)出版社,2007-15 何欽銘,顏暉,c語(yǔ)言設(shè)計(jì)教程.北京:高等教育出版社,2008年6 吳文虎,程序設(shè)計(jì)基礎(chǔ).北京:清華大學(xué)出版社,2003附 錄 :系統(tǒng)源程序代碼#include<stdio.h>#
18、include<stdlib.h>#include<malloc.h>#define maxsize 10 /順序表的最大長(zhǎng)度typedef int keytype; /定義關(guān)鍵字的類型為整數(shù)類型typedef int infotype; /定義其他類型為整數(shù)類型int ptime=0;int a=0,b=0,c=0,d=0; /置快速排序和堆排序的移動(dòng)和比較次數(shù)typedef struct keytype key; /關(guān)鍵字項(xiàng) infotype otherinfo; /其他數(shù)據(jù)項(xiàng)redtype;typedef struct redtype rmaxsize+1; /r
19、0作為監(jiān)視哨int length; /順序表長(zhǎng)度sqlist; void print(sqlist *l)int i;for(i=1;i<=l->length;i+)printf("%5d",l->ri.key);printf("n");/-/直接插入排序void insertsort(sqlist *l,int m,int n)/對(duì)數(shù)組元素r1到rl->length中的n個(gè)元素進(jìn)行直接插入排序 /r0中的內(nèi)容不作為排序數(shù)據(jù),作為一個(gè)標(biāo)記又稱為監(jiān)視哨int i,j;for(i=2;i<=l->length;i+) /n
20、-1次循環(huán)l->r0=l->ri; /將需要插入的值ri賦值給r0,設(shè)置監(jiān)視哨j=i-1;m+;while(l->r0.key<l->rj.key&&+n) /查找插入位置l->rj+1=l->rj; /前值覆蓋后值j-;m+;l->rj+1=l->r0; /將原ri中的記錄存入第j+1個(gè)位置printf("第%d趟排序結(jié)果為:",i-1); print(l);printf("直接插入排序的移動(dòng)次數(shù)為:%d,比較次數(shù)為:%dn",m,n);/-/冒泡排序void bubblesort(
21、sqlist *l,int m,int n)int i,j,k=0; redtype temp;for(i=l->length;i>1;i-) /n-1趟比較for(j=1;j<i;j+) /前后兩個(gè)記錄的數(shù)據(jù)大小剛好相反if(l->rj.key>l->rj+1.key&&+n)temp=l->rj; /交換數(shù)據(jù)l->rj=l->rj+1;l->rj+1=temp;m=m+3;k+;printf("第%d趟排序結(jié)果為:",k); print(l);printf("冒泡排序的移動(dòng)次數(shù)為:%d
22、,比較次數(shù)為:%dn",m,n);/-/快速排序void quicksort (sqlist *l, int left,int right) int i,j,temp; i=left;j=right;temp=l->ri.key;/設(shè)置初始的排序區(qū) /將i和j分別記錄待排序區(qū)域的最左側(cè)記錄和最右側(cè)記錄的位置 while(i<j) while (i<j&&temp<=l->rj.key) /從右側(cè)開始掃描 j-; b+; /找到第一個(gè)小于基準(zhǔn)記錄的數(shù)據(jù) l->ri=l->rj;/覆蓋l->ri a+; while (i&l
23、t;j&&l->ri.key<=temp) /從右側(cè)開始掃描 i+; b+; /找到第一個(gè)大于基準(zhǔn)記錄的數(shù)據(jù)l->rj=l->ri; /覆蓋l->rja+; l->ri.key=temp;/找到正確位置 a+; ptime+; printf("第%d次劃分排序?yàn)?",ptime); print(l); if (left<i-1) quicksort(l,left,i-1); /遞歸調(diào)用對(duì)左側(cè)分區(qū)域再進(jìn)行快速排序 if (i+1<right) quicksort(l,i+1,right); /遞歸調(diào)用對(duì)右側(cè)分區(qū)域
24、再進(jìn)行快速排序 /-/堆排序/調(diào)整l->rx的關(guān)鍵字使l->rx.y成為一個(gè)大堆void heapadjust(sqlist *l, int x,int y)int j;l->r0=l->rx ;for(j=2*x;j<=y;j=j*2)if(j<y&&l->rj.key<l->rj+1.key)+j;/j為key值較大的記錄下標(biāo) d+;if(l->r0.key>l->rj.key)d+;break;l->rx=l->rj;c+;x=j;l->rx=l->r0;c+;/對(duì)順序表l進(jìn)行
25、堆排序void heapsort(sqlist *l)int i,j;for(i=l->length/2;i>=0;-i) /將l->r1.i建成初始堆heapadjust(l,i,l->length);printf("初始序列建成堆:");print(l);for(j=l->length;j>1;-j) /對(duì)當(dāng)前l(fā)->r1.i進(jìn)行堆排序,共做n-1趟l->r0=l->rj;l->rj=l->r1;l->r1=l->r0;c=c+3;heapadjust(l,1,j-1);printf("
26、;第%d趟建堆結(jié)果為:",l->length-j+1);print(l); void binsort (sqlist *l, int length)/*對(duì)記錄數(shù)組r進(jìn)行折半插入排序,length為數(shù)組的長(zhǎng)度*/int i,j;redtype x;int low,high,mid;for ( i=2; i<=length ; +i ) x=l-> ri;low=1; high=i-1;while (low<=high ) /* 確定插入位置*/ mid=(low+high) / 2;if ( x.key<l-> rmid.key ) high=mid
27、-1;else low=mid+1;for ( j=i-1 ; j>= low; -j ) l->rj+1= l->rj; /* 記錄依次向后移動(dòng) */ l->rlow=x; /* 插入記錄 */ printf("第%d趟排序結(jié)果為:",i-1); print(l);/*binsort*/void selectsort(sqlist *l, int length)/*對(duì)記錄數(shù)組r做簡(jiǎn)單選擇排序,length為數(shù)組的長(zhǎng)度*/int i,j,k;int n;redtype x; n=length;for ( i=1 ; i<= n-1; +i) k
28、=i;for ( j=i+1 ; j<= n ; +j) if (l->rj.key < l->rk.key ) k=j;if ( k!=i) x= l->ri; l->ri= l->rk;l->rk=x;printf("第%d趟排序結(jié)果為:",i); print(l); /* selectsort */ void main()int i,k;char ch='y'sqlist *l; l=(sqlist *)malloc(sizeof(sqlist );while(ch='y')int m=0
29、,n=0; /置直接插入排序和冒泡排序的移動(dòng)和比較次數(shù)printf("nnn"); printf("ttn");printf("tt#*#*#*#*歡迎進(jìn)入排序管理系統(tǒng)*#*#*#*#n");printf("ttn");printf("nnn");printf("如果碰到意外結(jié)束的情況或者排序不正確的情況,請(qǐng)及時(shí)聯(lián)系管理員李立強(qiáng)、nn");printf("本系統(tǒng)為免費(fèi)系統(tǒng),如帶來(lái)任何問(wèn)題,自己負(fù)責(zé)、nn");printf("tt歡迎使用排序管理系
30、統(tǒng)n"); printf("tt 請(qǐng)選擇所需功能: n");printf("tt 1.直接插入排序 n");printf("tt 2.冒泡排序 n");printf("tt 3.快速排序 n");printf("tt 4.堆排序 n");printf("tt 5.折半插入排序 n");printf("tt 6.簡(jiǎn)單選擇排序 n");printf("tt 7.退出系統(tǒng) n");printf("tt歡迎使用排序管理系統(tǒng)n
31、");printf("nnn");printf("請(qǐng)選擇:");scanf("%d",&k);switch (k)case 1:printf("n您選擇的是直接插入排序:n"); printf("輸入要排序列表的長(zhǎng)度n:"); scanf("%d",&l->length); for(i=1;i<=l->length;i+) printf("輸入第%d個(gè)記錄的關(guān)鍵字:",i); scanf("%d&quo
32、t;,&l->ri.key); printf("初始輸入序列為:"); print(l); insertsort(l,m,n); printf("直接插入排序后記錄為:"); print(l); break;case 2:printf("n您選擇的是冒泡排序:n"); printf("輸入要排序列表的長(zhǎng)度n:"); scanf("%d",&l->length); for(i=1;i<=l->length;i+) printf("輸入第%d個(gè)記錄的
33、關(guān)鍵字:",i); scanf("%d",&l->ri.key); printf("初始輸入序列為:"); print(l); bubblesort(l,1,l->length); printf("冒泡排序后記錄為:"); print(l); break; case 3:printf("n您選擇的是快速排序:n"); printf("輸入要排序列表的長(zhǎng)度n:"); scanf("%d",&l->length); for(i=1;i&
34、lt;=l->length;i+) printf("輸入第%d個(gè)記錄的關(guān)鍵字:",i); scanf("%d",&l->ri.key); printf("初始輸入序列為:"); print(l); quicksort(l,1,l->length); printf("快速排序的移動(dòng)次數(shù)為:%d,比較次數(shù)為:%dn",a,b); printf("快速排序后記錄為:"); print(l); break; case 4:printf("n您選擇的是堆排序:n&quo
35、t;); printf("輸入要排序列表的長(zhǎng)度n:"); scanf("%d",&l->length); for(i=1;i<=l->length;i+) printf("輸入第%d個(gè)記錄的關(guān)鍵字:",i); scanf("%d",&l->ri.key); printf("初始輸入序列為:"); print(l); heapsort(l); printf("堆排序的移動(dòng)次數(shù)為:%d,比較次數(shù)為:%dn",c,d); printf(&qu
36、ot;堆排序后記錄為:"); print(l); break; case 5:printf("n您選擇的是折半插入排序:n"); printf("輸入要排序列表的長(zhǎng)度n:"); scanf("%d",&l->length); for(i=1;i<=l->length;i+) printf("輸入第%d個(gè)記錄的關(guān)鍵字:",i); scanf("%d",&l->ri.key); printf("初始輸入序列為:"); print(
37、l); binsort (l,l->length); printf("快速排序后記錄為:"); print(l); break; case 6:printf("n您選擇的是簡(jiǎn)單選擇排序:n"); printf("輸入要排序列表的長(zhǎng)度n:"); scanf("%d",&l->length); for(i=1;i<=l->length;i+) printf("輸入第%d個(gè)記錄的關(guān)鍵字:",i); scanf("%d",&l->ri.k
38、ey); printf("初始輸入序列為:"); print(l); selectsort(l, l->length); printf("快速排序后記錄為:"); print(l); break; case 7:break;default:printf("沒(méi)有找到你需要的排序方法"); break;printf("n是否繼續(xù)操作(y/n):");getchar();ch=getchar(); 致 謝時(shí)間飛逝,大學(xué)的學(xué)習(xí)生活很快就要過(guò)去,在這四年的學(xué)習(xí)生活中,收獲了很多,而這些成績(jī)的取得是和一直關(guān)心幫助我的人分
39、不開的。首先非常感謝學(xué)校開設(shè)這個(gè)課題,為本人日后從事計(jì)算機(jī)方面的工作提供了經(jīng)驗(yàn),奠定了基礎(chǔ)。本次畢業(yè)設(shè)計(jì)大概持續(xù)了半年,現(xiàn)在終于到結(jié)尾了。本次畢業(yè)設(shè)計(jì)是對(duì)我大學(xué)四年學(xué)習(xí)下來(lái)最好的檢驗(yàn)。經(jīng)過(guò)這次畢業(yè)設(shè)計(jì),我的能力有了很大的提高,比如操作能力、分析問(wèn)題的能力、合作精神、嚴(yán)謹(jǐn)?shù)墓ぷ髯黠L(fēng)等方方面面都有很大的進(jìn)步。這期間凝聚了很多人的心血,在此我表示由衷的感謝。沒(méi)有他們的幫助,我將無(wú)法順利完成這次設(shè)計(jì)。首先,我要特別感謝我的知道郭謙功老師對(duì)我的悉心指導(dǎo),在我的論文書寫及設(shè)計(jì)過(guò)程中給了我大量的幫助和指導(dǎo),為我理清了設(shè)計(jì)思路和操作方法,并對(duì)我所做的課題提出了有效的改進(jìn)方案。郭謙功老師淵博的知識(shí)、嚴(yán)謹(jǐn)?shù)淖黠L(fēng)和
40、誨人不倦的態(tài)度給我留下了深刻的印象。從他身上,我學(xué)到了許多能受益終生的東西。再次對(duì)周巍老師表示衷心的感謝。其次,我要感謝大學(xué)四年中所有的任課老師和輔導(dǎo)員在學(xué)習(xí)期間對(duì)我的嚴(yán)格要求,感謝他們對(duì)我學(xué)習(xí)上和生活上的幫助,使我了解了許多專業(yè)知識(shí)和為人的道理,能夠在今后的生活道路上有繼續(xù)奮斗的力量。另外,我還要感謝大學(xué)四年和我一起走過(guò)的同學(xué)朋友對(duì)我的關(guān)心與支持,與他們一起學(xué)習(xí)、生活,讓我在大學(xué)期間生活的很充實(shí),給我留下了很多難忘的回憶。最后,我要感謝我的父母對(duì)我的關(guān)系和理解,如果沒(méi)有他們?cè)谖业膶W(xué)習(xí)生涯中的無(wú)私奉獻(xiàn)和默默支持,我將無(wú)法順利完成今天的學(xué)業(yè)。致 謝四年的大學(xué)生活就快走入尾聲,我們的校園生活就要?jiǎng)澤暇涮?hào),心中是無(wú)盡的難舍與眷戀。從這里走出,對(duì)我
溫馨提示
- 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津遠(yuǎn)洋萬(wàn)和城高端產(chǎn)品打造案例
- 2025年大壩建設(shè)合作協(xié)議書
- 2025年錳粉系列項(xiàng)目建議書
- 高性能網(wǎng)絡(luò)漏洞掃描數(shù)據(jù)分析系統(tǒng)租賃與定制服務(wù)合同
- 展覽現(xiàn)場(chǎng)安保人員調(diào)度與補(bǔ)充協(xié)議
- 物流運(yùn)輸授權(quán)分成補(bǔ)充協(xié)議
- 智能家居解決方案性能優(yōu)化補(bǔ)充協(xié)議
- 商業(yè)步行街商業(yè)地產(chǎn)租賃與委托運(yùn)營(yíng)服務(wù)協(xié)議
- 跨行業(yè)戰(zhàn)略合作收益分成補(bǔ)充協(xié)議
- 海外合同文本翻譯及國(guó)際法律認(rèn)證合同
- 2023-2024學(xué)年小學(xué)語(yǔ)文作文歸類指導(dǎo)-想象類一(課件)統(tǒng)編版
- 八年級(jí)物理下冊(cè)《實(shí)驗(yàn)題》專項(xiàng)練習(xí)題及答案(人教版)
- 社會(huì)調(diào)查方法問(wèn)卷設(shè)計(jì)
- 竣 工 驗(yàn) 收 證 書(施管表2)
- 第八講 發(fā)展全過(guò)程人民民主PPT習(xí)概論2023優(yōu)化版教學(xué)課件
- 銀行情況說(shuō)明
- 基于PLC三層電梯控制系統(tǒng)設(shè)計(jì)課程設(shè)計(jì)論文
- 北科大工業(yè)生態(tài)學(xué)課件08現(xiàn)代工業(yè)的生態(tài)化轉(zhuǎn)向
- 安徽國(guó)星生物化學(xué)有限公司年產(chǎn)5萬(wàn)噸吡啶堿項(xiàng)目環(huán)境影響報(bào)告書
- 叉車加油管理規(guī)范
- 部編八下語(yǔ)文游記閱讀訓(xùn)練題語(yǔ)文八年級(jí)下冊(cè)能力訓(xùn)練(部編版)
評(píng)論
0/150
提交評(píng)論