數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)八 快速排序?qū)嶒?yàn)報(bào)告_第1頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)八 快速排序?qū)嶒?yàn)報(bào)告_第2頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)八 快速排序?qū)嶒?yàn)報(bào)告_第3頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)八 快速排序?qū)嶒?yàn)報(bào)告_第4頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)八 快速排序?qū)嶒?yàn)報(bào)告_第5頁
已閱讀5頁,還剩2頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、.數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)課程最終報(bào)告題 目:實(shí)驗(yàn)八快速排序?qū)I(yè)班級(jí):計(jì)算機(jī)科學(xué)與技術(shù)姓 名:XXX學(xué) 號(hào):指導(dǎo)老師: 李曉鴻完成日期:2015.01.06一、 需求分析背景排序是計(jì)算機(jī)內(nèi)經(jīng)常進(jìn)行的一種操作,其目的是將一組“無序”的記錄序列調(diào)整為“有序”的記錄序列。假設(shè)含n個(gè)記錄的序列為 R1, R2, , Rn 其相應(yīng)的關(guān)鍵字序列為 K1, K2, ,Kn 這些關(guān)鍵字相互之間可以進(jìn)行比較,即在它們之間存在著這樣一個(gè)關(guān)系 : Kp1Kp2Kpn按此固有關(guān)系將上式記錄序列重新排列為 Rp1, Rp2, ,Rpn 的操作稱作排序。排序算法是計(jì)算機(jī)科學(xué)中最重要的研究問題之一。對(duì)于排序的研究既有理論上的重要意義,

2、又有實(shí)際應(yīng)用價(jià)值。它在計(jì)算機(jī)圖形、計(jì)算機(jī)輔助設(shè)計(jì)、機(jī)器人、模式識(shí)別、及統(tǒng)計(jì)學(xué)等領(lǐng)域具有廣泛應(yīng)用。 常見的排序算法有起泡排序、直接插入排序、簡(jiǎn)單選擇排序、快速排序、堆排序等。例1:有時(shí)候應(yīng)用程序本身就需要對(duì)信息進(jìn)行排序。為了準(zhǔn)備客戶賬目,銀行需要根據(jù)支票的號(hào)碼對(duì)支票排序;例2:在一個(gè)繪制互相重疊的圖形對(duì)象的程序中,可能需要根據(jù)一個(gè)“在上方”關(guān)系將各對(duì)象排序,以便自下而上地繪出對(duì)象。例3:在一個(gè)由n個(gè)數(shù)構(gòu)成的集合上,求集合中第i小/大的數(shù)。例4:對(duì)一個(gè)含有n個(gè)元數(shù)的集合,求解中位數(shù)、k分位數(shù)。1. 問題描述在操作系統(tǒng)中,我們總是希望以最短的時(shí)間處理完所有的任務(wù)。但事情總是要一件件地做,任務(wù)也要操作

3、系統(tǒng)一件件地處理。當(dāng)操作系統(tǒng)處理一件任務(wù)時(shí),其他待處理的任務(wù)就需要等待。雖然所有任務(wù)的處理時(shí)間不能降低,但我們可以安排它們的處理順序,將耗時(shí)少的任務(wù)先處理,耗時(shí)多的任務(wù)后處理,這樣就可以使所有任務(wù)等待的時(shí)間和最小。只需要將n 件任務(wù)按用時(shí)去從小到大排序,就可以得到任務(wù)依次的處理順序。當(dāng)有 n 件任務(wù)同時(shí)來臨時(shí),每件任務(wù)需要用時(shí)ni,求讓所有任務(wù)等待的時(shí)間和最小的任務(wù)處理順序。2. 程序要求實(shí)現(xiàn)的功能當(dāng)有 n 件任務(wù)同時(shí)來臨時(shí),每件任務(wù)需要用時(shí)ni,求出讓所有任務(wù)等待的時(shí)間和最小的任務(wù)處理順序。3. 輸入輸出要求a) 輸入要求:第一行是一個(gè)整數(shù)n,代表任務(wù)的件數(shù)。接下來一行,有n個(gè)正整數(shù),代表每

4、件任務(wù)所用的時(shí)間。b) 輸出要求:輸出有n行,每行一個(gè)正整數(shù),從第一行到最后一行依次代表著操作系統(tǒng)要處理的任務(wù)所用的時(shí)間。按此順序進(jìn)行,則使得所有任務(wù)等待時(shí)間最小。4. 測(cè)試數(shù)據(jù)1. 輸入:請(qǐng)輸入任務(wù)件數(shù):-1輸出: 輸入有誤,請(qǐng)重新輸入!2. 輸入: 請(qǐng)輸入任務(wù)件數(shù):4 請(qǐng)輸入各任務(wù)所需時(shí)間:2 4 3 0輸出:輸入有誤,請(qǐng)重新輸入!3. 輸入:請(qǐng)輸入任務(wù)件數(shù):4請(qǐng)輸入各任務(wù)所需時(shí)間:2 4 3 6輸出:任務(wù)執(zhí)行的先后順序?yàn)椋?2 3 4 64. 輸入: 請(qǐng)輸入任務(wù)件數(shù):9 請(qǐng)輸入各任務(wù)所需時(shí)間:5 3 4 2 6 1 5 7 3輸出:任務(wù)執(zhí)行的先后順序?yàn)椋?23345567二、 概要設(shè)計(jì)(

5、一) 函數(shù)調(diào)用關(guān)系圖主函數(shù)void QuickSort(int a,int start,int end);void QuickSort(int a,int start,int end); int Partition(int a,int start,int end); int random(int start,int end) ;void change(int a,int i,int j); 三、 詳細(xì)設(shè)計(jì)(一)物理數(shù)據(jù)類型本程序所輸入的任務(wù)件數(shù)和任務(wù)時(shí)間均為整數(shù),可使用整數(shù) int實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)。使用數(shù)組實(shí)現(xiàn)快速排序。(二)具體步驟和偽代碼1. 輸入任務(wù)件數(shù)及任務(wù)時(shí)長(zhǎng) while(1)cout

6、size; while(size) /任務(wù)件數(shù)大于0,則執(zhí)行該循環(huán),否則重新輸入件數(shù)int i;cout請(qǐng)輸入各任務(wù)所需時(shí)間:; for(i=0;iai;if(ai=0)cout輸入有誤,請(qǐng)重新輸入!endl;break;if(i=size)break; cout輸入有誤,請(qǐng)重新輸入!=start) return t; 3. 數(shù)組中的兩個(gè)元素交換位置void change(int aN,int i,int j) int t; t=ai; ai=aj; aj=t; 4. 快速排序時(shí)對(duì)數(shù)據(jù)進(jìn)行劃分區(qū)域int Partition(int a,int start,int end) int temp=r

7、andom(start,end);/得到隨機(jī)軸值 change(a,temp,end);int i=start-1;/i用來指示軸值之后插入的位置int base=aend; /以最后一個(gè)數(shù)作為劃分的基點(diǎn)for(int j=start;jend;j+)if(aj=base)i+;change(a,i,j);change(a,i+1,end);return i+1; 5. 快速排序void QuickSort(int aN,int start,int end) if(end=start) return;/沒有數(shù)據(jù)或只有一個(gè)數(shù)據(jù) if(startend)/大于1個(gè)數(shù)據(jù) int i=Partitio

8、n(a,start,end); /劃分區(qū)域/對(duì)兩個(gè)區(qū)域分別進(jìn)行快排QuickSort(a,start,i-1); QuickSort(a,i+1,end); (三) 算法的具體步驟1) 通過用戶輸入任務(wù)件數(shù)n及任務(wù)時(shí)長(zhǎng),并對(duì)輸入合法性進(jìn)行驗(yàn)證;若合法,則進(jìn)行下一步,否則重新輸入;2) 通過調(diào)用random()函數(shù),獲取非負(fù)且小于n的隨機(jī)數(shù),該隨機(jī)數(shù)作為下標(biāo)所表示的元素作為軸值;3) 根據(jù)所得軸值,進(jìn)行快速排序。所有元素比基準(zhǔn)值小的擺放在基準(zhǔn)前面,所有元素比基準(zhǔn)值大的擺在基準(zhǔn)的后面(相同的數(shù)可以到任一邊)。在這個(gè)分割結(jié)束之后,該基準(zhǔn)就處于數(shù)列的中間位置。原本數(shù)列被劃分為兩部分4) 遞歸地把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序。5) 遞歸的基例是數(shù)列的大小是零或一,此時(shí)排序完成輸出排序后的數(shù)列結(jié)果到界面。四、 輸入輸出格式輸入:a. 輸入任務(wù)件數(shù)coutsize;b. 輸入每件任務(wù)時(shí)長(zhǎng)cout請(qǐng)輸入各任務(wù)所需時(shí)間:; for(i=0;iai;輸出:1、輸入不合法:if(size=0)cout輸入有誤,請(qǐng)重新輸入!endl;if(ai=0)cout輸入有誤,請(qǐng)重新輸入!endl;break;2、輸入合法

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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)論