c++數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)鏈表排序_第1頁(yè)
c++數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)鏈表排序_第2頁(yè)
c++數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)鏈表排序_第3頁(yè)
c++數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)鏈表排序_第4頁(yè)
c++數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)鏈表排序_第5頁(yè)
已閱讀5頁(yè),還剩1頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1.實(shí)驗(yàn)要求實(shí)驗(yàn)?zāi)康?通過(guò)編程,學(xué)習(xí)、實(shí)現(xiàn)、對(duì)比各種排序算法,掌握各種排序算法的優(yōu)劣,以及各種算法使用的情況。理解算法的主要思想及流程。實(shí)驗(yàn)內(nèi)容:使用鏈表實(shí)現(xiàn)下面各種排序算法,并進(jìn)行比較。排序算法:1、插入排序2、冒泡排序(改進(jìn)型冒泡排序)3、快速排序4、簡(jiǎn)單選擇排序5、堆排序(小根堆)要求:1、測(cè)試數(shù)據(jù)分成三類:正序、逆序、隨機(jī)數(shù)據(jù)2、對(duì)于這三類數(shù)據(jù),比較上述排序算法中關(guān)鍵字的比較次數(shù)和移動(dòng)次數(shù)(其中關(guān)鍵字交換計(jì)為3次移動(dòng))。3、對(duì)于這三類數(shù)據(jù),比較上述排序算法中不同算法的執(zhí)行時(shí)間,精確到微秒(選作)4、對(duì)2和3的結(jié)果進(jìn)行分析,驗(yàn)證上述各種算法的時(shí)間復(fù)雜度編寫測(cè)試main()函數(shù)測(cè)試線性表的正確性代碼要求:1、必須要有異常處理,比如刪除空鏈表時(shí)需要拋出異常;2、保持良好的編程的風(fēng)格:代碼段與段之間要有空行和縮近標(biāo)識(shí)符名稱應(yīng)該與其代表的意義一致函數(shù)名之前應(yīng)該添加注釋說(shuō)明該函數(shù)的功能關(guān)鍵代碼應(yīng)說(shuō)明其功能3、遞歸程序注意調(diào)用的過(guò)程,防止棧溢出2.程序分析通過(guò)排序算法將單鏈表中的數(shù)據(jù)進(jìn)行由小至大(正向排序)存儲(chǔ)結(jié)構(gòu)單鏈表存儲(chǔ)數(shù)據(jù):structnode{intdata;node*next;};單鏈表定義如下:classLinkList{private:node*front;public:LinkList(inta[],intn); 接插入排序:首先將待排序數(shù)據(jù)建立一個(gè)帶頭結(jié)點(diǎn)的單鏈表。將單鏈表劃分為有序區(qū)和無(wú)序區(qū),有序區(qū)只包含一個(gè)元素節(jié)點(diǎn),依次取無(wú)序區(qū)中的每一個(gè)結(jié)點(diǎn),在有序區(qū)中查找待插入結(jié)點(diǎn)的插入位置,然后把該結(jié)點(diǎn)從單鏈表中刪除,再插入到相應(yīng)位置。分析上述排序過(guò)程,需設(shè)一個(gè)工作指針p->next在無(wú)序區(qū)中指向待插入的結(jié)點(diǎn),在找到插入位置后,將結(jié)點(diǎn)p->next插在結(jié)點(diǎn)s和p之間。voidLinkList::InsertSort() 速排序:主要通過(guò)軸值將數(shù)據(jù)從兩端向中間進(jìn)行比較,交換以實(shí)現(xiàn)排序。通過(guò)遞歸的調(diào)用來(lái)實(shí)現(xiàn)整個(gè)鏈表數(shù)據(jù)的排序。代碼中選用了第一個(gè)元素作為軸值。一趟排序的代碼:voidLinkList::QSZ(node*b,node*e){if(b->next==e||b==e) 進(jìn)版的冒泡排序:通過(guò)設(shè)置pos來(lái)記錄無(wú)序邊界的位置以減少比較次數(shù)。將數(shù)據(jù)從前向后兩兩比較,遇到順序不對(duì)是直接交換兩數(shù)據(jù)的值。每交換一次movef+3;voidLinkList::BubbleSort(){LARGE_INTEGERt1,t2,feq;QueryPerformanceFrequency(&feq); 擇排序:每趟排序再待排序的序列中選擇關(guān)鍵碼最小的元素,順序添加至已排好的有序序列最后,知道全部記錄排序完畢。voidLinkList::SelectSort(){LARGE_INTEGERt1,t2,feq;QueryPerformanceFrequency(&feq); 排序:利用前一趟比較的結(jié)果來(lái)減少比較次數(shù),提高整體的效率。其中通過(guò)鏈表儲(chǔ)存了一棵樹(shù)。選擇使用小根堆進(jìn)行排序。voidLinkList::sift(intk,intm){inti=k,j=2*i;while(j<=m){comparef++;if(j<m&&(Get(j)->data>Get(j+1)->data)) j++;if(Get(i)->data<Get(j)->data) break;else{turn(Get(i),Get(j));i=j;j=2*i;}}}voidLinkList::heapsort(intn){LARGE_INTEGERt1,t2,feq;QueryPerformanceFrequency(&feq);出結(jié)果的函數(shù):voidtell(LinkList&a,LinkList&b,LinkList&c,LinkList&d,LinkList&e){();comparef=0;movef=0;();cout<<"排序結(jié)果:";();cout<<"1.插入排序法: Compare:"<<setw(3)<<comparef<<";Move:"<<setw⑶<<movef<<endl;comparef=0;movef=0;();cout<<"2.改進(jìn)型冒泡排序法:Compare:"<<setw(3)<<comparef<<";Move:<<setw⑶<<movef<<endl;comparef=0;movef=0;();cout<<"3.快速排序法: Compare:"<<setw(3)<<comparef<<";Move:"<<setw⑶<<movef<<endl;comparef=0;movef=0;();cout<<”4.簡(jiǎn)單選擇排序法Compare:"<<setw(3)<<comparef<<";Move:"<<setw(3)<<movef<<endl;comparef=0;movef=0;(10);cout<<"5.堆排序算法Compare:"<<setw(3)<<comparef<<";Move:"<<setw(3)<<movef<<endl;}7.統(tǒng)計(jì)時(shí)間的函數(shù):#include<>{LARGE_INTEGERt1,t2,feq;QueryPerformanceFrequency(&feq);程序運(yùn)行結(jié)果1.流程圖:結(jié)束2.測(cè)試條件:如果需要對(duì)不同的正序,逆序隨機(jī)序列進(jìn)行排序,則需要在main函數(shù)中進(jìn)行初始化設(shè)置。3.測(cè)試結(jié)論:SBC:\Windows\system32\cmd.exe正序數(shù)明:123456789lt>麋作時(shí)IS]為:7.89469B-0071234567S910,排序法: Conipcti'B:45§[SIX:7-?^46Ve-W07:型曾泡排序法:Compare:&3間作埠起眼瑞1.噪2.噪3.澡安舞,|可光;l.Ei?894e-006

啡序法: Compare:45s同為:2.36841B-006

困舉拉序法Conpare:54;

間匕?.49995d-00617;Move-Moue:Move:法Compare: 19;Moue: 63列.109H7654221間為:7.89469c-007S:123456789IB序法:Compare: 9;|可為?1.97367e-00G

型冒泡排序法:Compare:

間為:5.52628e-006

排序法:Coware:129;

間為;7.894690-00-?田晅排序,去Oonpare;54

間為:9.0?889e-086MouesSMoveMoue-45Moye:90135I詈間洗一間序省迦異89法叱

7.序9.HF

:4^--Moye:二法Move; 90間塞技累1.操2.噪3.操4.麋5.晴爭(zhēng)排序法Conpare:54;Conpare: 29:8.68416e-006怯CompeLi4e= 21繼續(xù).一■26105839147

:1.1842e-006

12345G7S910

怯:CornpcLi'e: 29J:l-¥7367e-O061冒泡排序法:Compare:Have?38;Moue-7Moue:Moye:10Move;S44.總結(jié)通過(guò)這次實(shí)驗(yàn)我再次復(fù)習(xí)了鏈表的建立及相應(yīng)的操作,對(duì)各類排序算法的實(shí)現(xiàn)也有了新的理解,在調(diào)試過(guò)程中出現(xiàn)了許多問(wèn)題也花費(fèi)了很多時(shí)間和精力去逐步解決,最后程序運(yùn)行成功的瞬間真的很開(kāi)心。問(wèn)題一:直接插入排序中若是使用從后向前比較插入的話(即書(shū)上的辦法)難以找到該節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),不方便進(jìn)行操作,所以最后采用了從前向后進(jìn)行比較。voidLinkList::InsertSort() 入排序法: Compare:“<<setw(3)<<comparef<<"";Move:""<<setw⑶<<movef<<endl;comparef=0;movef=0;();cout<<"2.改進(jìn)型冒泡排序法:Compare:"<<setw(3)<<comparef<<”;Move:<<setw⑶<<movef<<endl;comparef=0;movef=0;();cout<<"3.快速排序法: Compare:"<<setw(3)<<comparef<<";Move:"<<setw⑶<<movef<<endl;comparef=0;movef=0;();cout<<”4.簡(jiǎn)單選擇排

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論