



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
HUNAN UNIVERSITY課程預(yù)習(xí)報(bào)告題 目: 快速排序 學(xué)生姓名 學(xué)生學(xué)號 2012080102 專業(yè)班級 計(jì)算機(jī)科學(xué)與技術(shù)班 完 成 日 期 4 一、需求分析輸入的形式和輸入值的范圍:第一行是一個(gè)整數(shù)n,代表任務(wù)的件數(shù)。接下來一行,有n個(gè)正整數(shù),代表每件任務(wù)所用的時(shí)間。中間用空格或者回車隔開。不對非法輸入做處理,及假設(shè)用戶輸入都是合法的。輸出的形式:輸出有n行,每行一個(gè)正整數(shù),從第一行到最后一行依次代表著操作系統(tǒng)要處理的任務(wù)所用的時(shí)間。按此順序進(jìn)行,則使得所有任務(wù)等待時(shí)間最小。程序所能達(dá)到的功能:在操作系統(tǒng)中,當(dāng)有 n 件任務(wù)同時(shí)來臨時(shí),每件任務(wù)需要用時(shí)ni,輸出所有任務(wù)等待的時(shí)間和最小的任務(wù)處理順序。測試數(shù)據(jù):輸入請輸入任務(wù)個(gè)數(shù):9請輸入任務(wù)用時(shí):5 3 4 2 6 1 5 7 3輸出任務(wù)執(zhí)行的順序:1 2 3 3 4 5 5 6 7二、概要設(shè)計(jì)抽象數(shù)據(jù)類型為實(shí)現(xiàn)上述程序的功能,應(yīng)以整數(shù)存儲用戶的第一個(gè)輸入。并將隨后輸入的一組數(shù)據(jù)儲存在整數(shù)數(shù)組中。算法的基本思想如果將任務(wù)按完成時(shí)間從小到大排序,則在完成前一項(xiàng)任務(wù)時(shí)后面任務(wù)等待的時(shí)間總和最小,即得到最小的任務(wù)處理順序。采取對輸入的任務(wù)時(shí)間進(jìn)行快速排序的方法可以在相對較小的時(shí)間復(fù)雜度下得到從小到大的順序序列。三、詳細(xì)設(shè)計(jì)實(shí)現(xiàn)概要設(shè)計(jì)中定義的所有數(shù)據(jù)類型:第一次輸入的正整數(shù)要求大于零,為了能夠存儲,采用int型定義變量。接下來輸入的一組整數(shù),數(shù)據(jù)范圍大于零,為了排序需要,采用線性結(jié)構(gòu)存儲,即int類型的數(shù)組。實(shí)現(xiàn)程序的具體步驟:程序主要采取快速排序的方法處理無序數(shù)列:1在序列中根據(jù)隨機(jī)數(shù)確定軸值,根據(jù)軸值將序列劃分為比軸值小和比軸值大的兩個(gè)子序列。2對每個(gè)子序列采取從左右兩邊向中間搜索的方式,不斷將值與軸值比較,如果左邊的值大于軸值而右邊的小于軸值則將二者交換,直到左右交叉。3分別對處理完畢的兩個(gè)子序列遞歸地采取1,2步的操作,直到子序列中只有一個(gè)元素。程序各模塊的偽代碼:主函數(shù)int main() int n; coutn; int an; cout請輸入任務(wù)用時(shí):; for(int i=0;iai; qsort(a,0,n-1);/調(diào)用“快排函數(shù)” cout任務(wù)執(zhí)行的順序:; for(int i=0;in;i+)coutai ; /輸出排序結(jié)果快速排序算法:void qsort(int a,int i,int j) if(j=i)return;/只有一個(gè)元素 int pivotindex=findpivot(a,i,j);/調(diào)用“軸值尋找函數(shù)”確定軸值 swap(a,pivotindex,j);/調(diào)用“交換函數(shù)”將軸值置末 int k=partition(a,i-1,j,aj);/調(diào)用“分割函數(shù)”根據(jù)軸值分割序列 swap(a,k,j); qsort(a,i,k-1);/遞歸調(diào)用,實(shí)現(xiàn)子序列的調(diào)序 qsort(a,k+1,j); 軸值尋找算法:/為了保證軸值的“隨機(jī)性”,采用時(shí)間初始化種子。int findpivot(int a,int i,int j) srand(unsigned int)time(NULL); int n=rand()%(j-i+1)+i; /返回傳入范圍內(nèi)的軸值 數(shù)據(jù)交換算法:void swap(int a,int i,int j) int temp; temp=ai; ai=aj; aj=temp; 序列分割算法:int partition(int a,int l,int r,int &pivot) do while(a+lpivot); swap(a,l,r); while(lr); swap(a,l,r); return l;/返回右邊部分的首位置 算法的時(shí)空分析對于長度為n的序列,進(jìn)行快速排序的效率取決于對主值的選擇。隨機(jī)化快速排序雖然在最壞情況下的時(shí)間復(fù)雜度仍然是O(n2),但是隨機(jī)數(shù)取值不佳的概率比較低,所以大部分能夠達(dá)到O(nlogn)的時(shí)間復(fù)雜度。另輸入輸出的時(shí)間復(fù)雜度為(n)。所以該算法的時(shí)間復(fù)雜度為O(nlogn)。函數(shù)的調(diào)用關(guān)系圖輸入Findpivot 確定軸值Swap 交換快排主函數(shù)Pa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 擔(dān)保人抵押合同示例
- 智能供應(yīng)鏈安防系統(tǒng)開發(fā)合同
- 樹苗買賣合同
- 房屋修建鄰里協(xié)議書
- 挖機(jī)租用合同協(xié)議書
- 平安建設(shè)共建協(xié)議書
- 房租拆改合同協(xié)議書
- 平臺運(yùn)營外包協(xié)議書
- 放棄失地保險(xiǎn)協(xié)議書
- 建筑合同銷毀協(xié)議書
- 沖孔樁施工安全管理培訓(xùn)講義
- 壓力管道安全檢查表參考范本
- 部編人教版小學(xué)五年級下冊語文文言文閱讀理解課后專項(xiàng)練習(xí)
- 皮膚管理--ppt課件
- 雙向氣動(dòng)插板門使用說明書
- 無生老母救世血書寶卷
- 公路工程計(jì)量與計(jì)價(jià)考試B本科
- 住房公積金廉政風(fēng)險(xiǎn)防控指引
- 醫(yī)用耗材分類目錄 (低值 ╱ 高值)
- 小學(xué)數(shù)學(xué)總復(fù)習(xí)-數(shù)的認(rèn)識講義
- 2020山西中考模擬百校聯(lián)考試卷(一)道德與法治答題卡
評論
0/150
提交評論