


下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、首先,排序算法的穩(wěn)定性大家應(yīng)該都知道,通俗地講就是能保證排序前2個相等的數(shù)其在序列的前后位置順序和排序后它們兩個的前后位置順序相同。在簡單形式化一下,如果Ai = Aj, Ai原來在位置前,排序后Ai還是要在Aj位置前。 其次,說一下穩(wěn)定性的好處。排序算法如果是穩(wěn)定的,那么從一個鍵上排序,然后再從另一個鍵上排序,第一個鍵排序的結(jié)果可以為第二個鍵排序所用。基數(shù)排序就 是這樣,先按低位排序,逐次按高位排序,低位相同的元素其順序再高位也相同時是不會改變的。另外,如果排序算法穩(wěn)定,對基于比較的排序算法而言,元素交換 的次數(shù)可能會少一些(個人感覺,沒有證
2、實(shí))。 回到主題,現(xiàn)在分析一下常見的排序算法的穩(wěn)定性,每個都給出簡單的理由。 (1)冒泡排序 冒泡排序就是把小的元素往前調(diào)或者把大的元素往后調(diào)。比較是相鄰的兩個元素比較,交換也發(fā)生在這兩個元素之間。所以,如果兩個元素相等,我想你是不會再無 聊地把他們倆交換一下的;如果兩個相等的元素沒有相鄰,那么即使通過前面的兩兩交換把兩個相鄰起來,這時候也不會交換,所以相同元素的前后順序并沒有改 變,所以冒泡排序是一種穩(wěn)定排序算法。 (2)選擇排序
3、 選擇排序是給每個位置選擇當(dāng)前元素最小的,比如給第一個位置選擇最小的,在剩余元素里面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個 元素不用選擇了,因?yàn)橹皇O滤粋€最大的元素了。那么,在一趟選擇,如果當(dāng)前元素比一個元素小,而該小的元素又出現(xiàn)在一個和當(dāng)前元素相等的元素后面,那么 交換后穩(wěn)定性就被破壞了。比較拗口,舉個例子,序列5 8 5 2 9, 我們知道第一遍選擇第1個元素5會和2交換,那么原序列中2個5的相對前后順序就被破壞了,所以選擇排序不是一個穩(wěn)定的排序算法。 (3)插入排序 &
4、#160; 插入排序是在一個已經(jīng)有序的小序列的基礎(chǔ)上,一次插入一個元素。當(dāng)然,剛開始這個有序的小序列只有1個元素,就是第一個元素。比較是從有序序列的末尾開 始,也就是想要插入的元素和已經(jīng)有序的最大者開始比起,如果比它大則直接插入在其后面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相 等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后順序沒有改變,從原無序序列出去的順序就是排好序后的順序,所以插入排序是穩(wěn) 定的。 (4)快速排序 快速排序有兩個方向,左邊的i下標(biāo)一直往右走,當(dāng)ai <= acenter_index,
5、其中center_index是中樞元素的數(shù)組下標(biāo),一般取為數(shù)組第0個元素。而右邊的j下標(biāo)一直往左走,當(dāng)aj > acenter_index。如果i和j都走不動了,i <= j, 交換ai和aj,重復(fù)上面的過程,直到i>j。 交換aj和acenter_index,完成一趟快速排序。在中樞元素和aj交換的時候,很有可能把前面的元素的穩(wěn)定性打亂,比如序列為 5 3 3 4 3 8 9 10 11, 現(xiàn)在中樞元素5和3(第5個元素,下標(biāo)從1開始計(jì))交換就會把元素3的穩(wěn)定性打亂,所以快速排序是一個不穩(wěn)定的排序算法,不穩(wěn)定發(fā)生在中樞元素和aj 交換的時刻。 (5)歸并排序
6、160; 歸并排序是把序列遞歸地分成短序列,遞歸出口是短序列只有1個元素(認(rèn)為直接有序)或者2個序列(1次比較和交換),然后把各個有序的段序列合并成一個有 序的長序列,不斷合并直到原序列全部排好序??梢园l(fā)現(xiàn),在1個或2個元素時,1個元素不會交換,2個元素如果大小相等也沒有人故意交換,這不會破壞穩(wěn)定 性。那么,在短的有序序列合并的過程中,穩(wěn)定是是否受到破壞?沒有,合并過程中我們可以保證如果兩個當(dāng)前元素相等時,我們把處在前面的序列的元素保存在結(jié) 果序列的前面,這樣就保證了穩(wěn)定性。所以,歸并排序也是穩(wěn)定的排序算法。 (6)基數(shù)排序 基數(shù)排序是按照低位先排序,然后收
7、集;再按照高位排序,然后再收集;依次類推,直到最高位。有時候有些屬性是有優(yōu)先級順序的,先按低優(yōu)先級排序,再按高優(yōu) 先級排序,最后的次序就是高優(yōu)先級高的在前,高優(yōu)先級相同的低優(yōu)先級高的在前?;鶖?shù)排序基于分別排序,分別收集,所以其是穩(wěn)定的排序算法。 (7)希爾排序(shell) 希爾排序是按照不同步長對元素進(jìn)行插入排序,當(dāng)剛開始元素很無序的時候,步長最大,所以插入排序的元素個數(shù)很少,速度很快;當(dāng)元素基本有序了,步長很小, 插入排序?qū)τ谟行虻男蛄行屎芨?。所以,希爾排序的時間復(fù)雜度會比o(n2)好一些。由于多次插入排序,我們知道一次插入排序是穩(wěn)定的,不會改變相同元 素的相對順序,但在不同的插入排序過程中,相同的元素可能在各自的插入排序中移動,最后其穩(wěn)定性就會被打亂,所以shell排序是不穩(wěn)定的。 (8)堆排序 我們知道堆的結(jié)構(gòu)是節(jié)點(diǎn)i的孩子為2*i和2*i+1節(jié)點(diǎn),大頂堆要求父節(jié)點(diǎn)大于等于其2個子節(jié)點(diǎn),小頂堆要求父節(jié)點(diǎn)小于等于其2個子節(jié)點(diǎn)。在一個長為n 的序列,堆排序的過程是從第n/2開始和其子節(jié)點(diǎn)共3個值選擇最大(大頂堆)或者最小(小頂堆),這3個元素之間的選擇當(dāng)然不會破壞穩(wěn)定性。但當(dāng)為n /2-1, n/2-2, .1這些個父節(jié)點(diǎn)選擇元素時,就會破壞穩(wěn)定性。有可能第n/2個父節(jié)點(diǎn)交換把后面一個元素交換過去了,而第n/2-
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 臨產(chǎn)護(hù)理教學(xué)查房
- 漁具知識技巧培訓(xùn)課件
- 艾灸盒技術(shù)課件
- 海王星辰培訓(xùn)課件
- 品牌建立培訓(xùn)課件
- 住院醫(yī)師培訓(xùn)年度匯報
- 質(zhì)量培訓(xùn)課程課件
- 氣管插管操作配合護(hù)理
- 早教安全培訓(xùn)
- 奧爾夫音樂的培訓(xùn)課件
- 2025年度人工智能產(chǎn)業(yè)投資基金入股協(xié)議4篇
- 聚脲涂料施工方案
- T-CCIASD 10012-2024 ISO 標(biāo)準(zhǔn)集裝箱用水性涂料
- 激越管理的22項(xiàng)建議(精神科患者激越的評估和管理)
- 老年人防詐騙防電信詐騙老年人反詐騙課件
- 2024版血液透析醫(yī)院感染預(yù)防與控制標(biāo)準(zhǔn)
- 基于PLC的恒壓供水控制系統(tǒng)的設(shè)計(jì)-畢業(yè)論文
- 《成都來福士廣場》課件
- 電力公司班組長講安全
- 植物油燃料合同協(xié)議書(2篇)
- 2024電力建設(shè)工程綠色建造評價規(guī)范
評論
0/150
提交評論