分治技術(shù)在排序算法中的應(yīng)用

分治技術(shù)在排序算法中的應(yīng)用

ID:21636236

大?。?4.50 KB

頁數(shù):5頁

時間:2018-10-23

分治技術(shù)在排序算法中的應(yīng)用_第1頁
分治技術(shù)在排序算法中的應(yīng)用_第2頁
分治技術(shù)在排序算法中的應(yīng)用_第3頁
分治技術(shù)在排序算法中的應(yīng)用_第4頁
分治技術(shù)在排序算法中的應(yīng)用_第5頁
資源描述:

《分治技術(shù)在排序算法中的應(yīng)用》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。

1、分治技術(shù)在排序算法中的應(yīng)用【摘要】講述了運用分治技術(shù)的思想實現(xiàn)排序算法中的歸并排序、快速排序兩種排序算法,然后對兩種排序算法的效率進行了比較,得出了采用分治技術(shù)的排序算法是比較有效的算法。  【關(guān)鍵詞】分治技術(shù);排序算法;歸并排序;快速排序    排序是計算機科學(xué)中經(jīng)常遇到的工作,是程序設(shè)計中的一種重要運算,它的功能是將一個數(shù)據(jù)元素(或記錄)的任意序列,重新排列成某個按關(guān)鍵字有序的序列。分治技術(shù)的基本思想是將一個規(guī)模為N的問題分解為K個規(guī)模較小的子問題,這些子問題相互獨立且與原問題性質(zhì)相同。求出子問題的解,就可得到原問題的解。如果在排序算法中巧妙得應(yīng)用分治技術(shù),可以使排序算法更具藝術(shù)

2、性。本文就排序算法中的歸并排序和快速排序如何應(yīng)用分治技術(shù)做簡單的講述。 ?。保畾w并排序  歸并排序(Mergesort)是第一個計算機排序方法,它是由JohnvonNerman于1945年提出,是最能體現(xiàn)分治技術(shù)設(shè)計思路的算法之一?! ‘?dāng)待排元素N大于1時歸并排序的步驟如下: ?、艑⒋判蛄卸譃殚L度為N/2的兩個子序列。 ?、七f歸地對每一個子序列進行歸并排序,直至N等于1?! 、菤w并兩個排好的有序子序列?! ≡O(shè)一初始序列:49386597761327,對該序列實行歸并排序過程如下:  初始序列:[49][38][65][97][76][13][27]  第一步:[3849][659

3、7][1376][27]  第二步:[38496597][132776]  第三步:[13273849657697]  歸并排序用代碼描述如下:  算法mergesort:  template〈typenameT〉  voidmergesort(Ta[],intleft,intright)  {  T*b=neid=(left+right)/2;//取中點  mergesort(a,left,mid);  mergesort(a,mid+1,right);  merge(a,b,left,mid,right);//合并到數(shù)組b  copy(a,left,right);//復(fù)制回數(shù)組a

4、  }  }  其中,算法Merge()合并兩個排好序的數(shù)組到一個新的數(shù)組中,用代碼表示Merge()如下:  template〈typenameT〉  voidmerge(Ta[],Tb[],int1,intm,intr)  {  inti=1,j=m+1,k=1; ?。ΓΓ╦m)  {  for(intq=j;q求解(常為遞歸)—>合并”的流程來進行設(shè)計的,是一個典型的分治算法?! ?.快速排序  快速排序是由C.A.EHoare于1962年提出的,至今被認為是最好的排序算法?!坝嬎銠C科學(xué)與工程(prtingScience&Engineering)”雜志將快速排序算法列為20世

5、紀(jì)在科學(xué)和工程的開發(fā)與應(yīng)用中最有影響的10個算法之一。它也是一種基于分治技術(shù)的排序算法,也是按“劃分->求解—>合并”的思路來設(shè)計的。不過快速排序中的劃分不再是平衡的二爹媽,它是以待排序的任一元素(常為首元素,常稱為“樞軸”)為界限,分成大于該元素的部分和小于該元素的部分,然后再遞歸地解決該兩部分的一種高效算法。  我們首先分析快速排序中的“劃分”方法。劃分的目的在于劃分后使得一個元素處于一個正確的位置(該元素前面所有元素均小于后面所有元素)。要達到這個目的,方法是多樣的,有的需要較多輔助空間,有的需要較少輔助空間。有的快一點,有的慢一點,這里給出一種所需輔助空間較小,而又較快的方法

6、:  算法split:  template  intsplit(Ta[],intloplate  voidqaort(Ta[],intleft,intright)  {  if(left求解(常為遞歸)—>合并”的思路來設(shè)計的,只不過快速排序中對劃分后的子序列是直接就地排序的,未引入輔助數(shù)組,因此合并的過程較為簡單,只是棧中函數(shù)調(diào)用的簡單返回,幾乎不需要進行任何其它運算?! 【C上,歸并排序和快速排序都是分治技術(shù)在排序中的應(yīng)用。但兩者在設(shè)計過程中的側(cè)重點不同,歸并排序側(cè)重于分治中的“合并”步驟;而快速排序則側(cè)重于“劃分”步驟。但兩者都很好的體現(xiàn)了分治技術(shù)的思想?!    ?/p>

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。