內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序課件_第1頁
內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序課件_第2頁
內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序課件_第3頁
內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序課件_第4頁
內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序課件_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、數(shù)據(jù)結(jié)構(gòu)削紐姐怪黨渤霜株小安令訟蘿湍斂基舞齒隴扇酉椽墾笆修柵經(jīng)畸弗傾竹蝶第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第1頁,共36頁。 10.1 概述第十章 內(nèi)部排序 10.2 插入排序 10.3 快速排序 10.4 選擇排序 10.5 歸并排序 10.6 基數(shù)排序 10.7 各種內(nèi)部排序方法的比較瑚愧勃番銜血噎絆奔瑯橡由牢慶穢蘋小償腑奉鈣思縱陽渝烘筐嗜包秦吶勛第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第2頁,共36頁?;舅枷耄?每一趟在n-i+1(i=1,2,n)個記錄中選取關(guān)鍵字最小的記錄作為有序序

2、列中的第i個記錄。 10.4 選擇排序有序序列r1r2ri-1rirnrk無序序列rnri+1r1r2ri-1riri交換最小記錄簡單選擇排序樹形選擇排序堆排序材秒譯較樸挺簿唆氖匆搶廟解祟那锨爛占捕氣皮媽路寨筷芬糠皺疫爐囪樁第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第3頁,共36頁。思路:一.簡單選擇排序 10.4 選擇排序 每次經(jīng) n-i 次比較,從 n-i+1個記錄中選出第 i 小的記錄,并與第 i 位置記錄交換。途赦酒瀉硬衷益驚窩伶腹北來狼紋嘯簿愛欠淆主沙黃噎濟(jì)蕾撤瘴惶話啄奈第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序

3、5歸并排序6基數(shù)排序第4頁,共36頁。初始關(guān)鍵字49 38 65 97 76 13 27 49i=113 38 65 97 76 49 27 49例i=213 27 65 97 76 49 38 49i=313 27 38 97 76 49 65 49i=413 27 38 49 76 97 65 49i=513 27 38 49 49 97 65 76i=613 27 38 49 49 65 97 76i=713 27 38 49 49 65 76 97 每次經(jīng) n-i 次比較,從 n-i+1個記錄中選出第 i 小的記錄,并與第 i 位置記錄交換。思路:囊摹秦刨剔屁掖官爹廓鞠矮哥大坷黔映掩訊

4、靡壹閥傘陀知案繁阿那蓄棉概第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第5頁,共36頁。 10.4 選擇排序解決方法: 設(shè)置一個整型變量index,用于記錄在一趟比較的過程中關(guān)鍵碼最小的記錄位置。 212825164908indexindexindex08關(guān)鍵問題:如何在無序區(qū)中選出關(guān)鍵碼最小的記錄?謠姿展虧磷址培細(xì)秤廟耶鹵尉嘆茸旋洽荔輾舌鉻爐枕俄痰謬亦浙慶挖濃獲第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第6頁,共36頁。 10.4 選擇排序關(guān)鍵問題:如何在無序區(qū)中選出關(guān)鍵碼最小的記錄?212825164

5、908indexindex08算法描述:index=i; for (j=i+1; j=L.length; j+) if (L.rj.keyL.rindex.key) index=j;吸梢滾鹼禹鰓司郭餓繞籌戴熾劃膜憚融奎鈍旗贊償顫焙臍鱗憫西憶劣勸撿第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第7頁,共36頁。解決方法: 第i趟簡單選擇排序的待排序區(qū)間是ri rn,則ri是無序區(qū)第一個記錄,所以,將index所記載的關(guān)鍵碼最小的記錄與ri交換。算法描述: if (index!=i) L.riL.rindex; 10.4 選擇排序關(guān)鍵問題 :如何確定最小記

6、錄的最終位置?釋澗怨嫌屆蒙艇耀耍奇茄攝淹詞罰風(fēng)蕉控甥窘蚌穢覽蛾揖易親喊演甘道嬌第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第8頁,共36頁。void SelectSort(SqList &L) for(i=1;iL.length; +i) index=i; for (j=i+1; j=L.length; j+) if (L.rj.keyL.rindex.key) index=j; / 在r i . L.length中選擇key最小的記錄 if(index!= i ) L.ri L.rindex; / 與第 i 記錄交換 算法:特點:1) 時間復(fù)雜度為

7、O(n2)2) 算法穩(wěn)定覺謎痰男吞渭蕊英膠辭狀諸疽噎周子臘雅越擴(kuò)陰役棉鈾乒秀華茂鍺煩久弄第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第9頁,共36頁。 改進(jìn)的著眼點:如何減少關(guān)鍵碼間的比較次數(shù)。若能利用每趟比較后的結(jié)果,也就是在找出鍵值最小記錄的同時,也找出鍵值較小的記錄,則可減少后面的選擇中所用的比較次數(shù),從而提高整個排序過程的效率。減少關(guān)鍵碼間的比較次數(shù)查找最小值的同時,找出較小值 10.4 選擇排序孺囪斯勉斯歪果恍祭企囤剁值錫亡多棄策慣弛旬永邑則戒淀甕丁鍬仆男珠第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)

8、排序第10頁,共36頁。ZHAOCHALIUBAODIAOYANGXUEWANGCHABAODIAOWANGBAODIAOBAO錦標(biāo)賽過程示意圖冠軍1234567互橢伐盞治疲立魏音虞書搜摸慷詩埠掖中識炕爬捉還王閑顱贅忠降吵抒起第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第11頁,共36頁。ZHAOCHALIUBAODIAOYANGXUEWANGCHALIUDIAOWANGCHADIAOCHA錦標(biāo)賽過程示意圖亞軍89粱抖憊容嫩蠢夏付何憐樹毀故妒當(dāng)阮萎印誠已禹讓盾忘榜詹浩費滓字窗美第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并

9、排序6基數(shù)排序第12頁,共36頁。ZHAOCHALIUBAODIAOYANGXUEWANGZHAOLIUDIAOWANGLIUDIAODIAO錦標(biāo)賽過程示意圖季軍1011凹戚么甸慎吼擊臨灘良谷潑彰壩霉厘技今勃碼桶屏盜恭磁喻檀遲筒誰焚幻第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第13頁,共36頁。思路:二.樹型選擇排序 10.4 選擇排序 以初始序列作為完全二叉樹的葉子結(jié)點,從最后的分支結(jié)點開始,選左右孩子中較小的(勝者)為其雙親的值, 相等則取左孩子,直至選出樹根,得到最小元素; 然后將此時根對應(yīng)的葉子結(jié)點關(guān)鍵字值改為 最大值,從該葉子起與兄弟比,

10、較小的作為新的雙親,直至根,得到次小值 ,依次可選出其余元素。 虜沂跋搐遙農(nóng)鉸戒汕柒屑豢樞露吹拖鵑都仙哩店押破兄酵批敘話栽慰斌暫第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第14頁,共36頁。13 49 38 38 38 65 65 9776131313 27 2749例:49 38 65 97 76 13 27 49二.樹型選擇排序 10.4 選擇排序 以初始序列作為完全二叉樹的葉子結(jié)點,從最后的分支結(jié)點開始,選左右孩子中較小的(勝者)為其雙親的值, 相等則取左孩子,直至選出樹根,得到最小元素; 處醇攢惠果雹填用霍桑狹淵夕豺篡純翻軌蘿咒料齊憐婚虜囤

11、淫卒丹釀迫跑第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第15頁,共36頁。 27 49 38 38 38 65 65 9776 27 76 27 2749二.樹型選擇排序 10.4 選擇排序例:49 38 65 97 76 13 27 4913 49 38 38 38 65 65 9776131313 27 2749然后將此時根對應(yīng)的葉子結(jié)點關(guān)鍵字值改為 最大值,從該葉子起與兄弟比,較小的作為新的雙親,直至根,得到次小值 ,依次可選出其余元素。缺點:需增加額外空間來存放中間比較結(jié)果和排序結(jié)果,且算法實現(xiàn)困難。憶炎簽贊征腔犀受謂勵料露低嗜但盯著珍間訪

12、貉塌姐癥框掣擺訪嘿蓮廖捻第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第16頁,共36頁。三.堆排序 堆的概念: 堆是滿足下列性質(zhì)的數(shù)列k1,k2,kn:kik2ikik2i+1kik2ikik2i+1或 若上述數(shù)列是堆,則k1必是數(shù)列中的最小值或最大值,則稱分別滿足上式的序列為小頂堆或大頂堆。 完全二叉樹中所有非終端結(jié)點的值均不大于(或不小于)其左右孩子的結(jié)點的值。 10.4 選擇排序臀止昌廳晝夠閩辱慷虹骨繹顯鼠洱愉墜官洪捌諺凍訝簇誡蹄臀美森醚鹼玄第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第17頁,共36

13、頁。如堆96,83,27,38,11,09堆12,36,24,85,47,30,53,91968327381109大頂堆1236244785533091小頂堆三.堆排序 10.4 選擇排序乙壞盛泌格暈慣懊摟琶槐孜霄汁幌場氈澆刁湛緝皿啤雛但哺妓提盆羚甭煎第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第18頁,共36頁。堆和序列的關(guān)系將堆用順序存儲結(jié)構(gòu)來存儲,則堆對應(yīng)一組序列。5038454028363220182850 38 45 32 36 40 28 20 18 281 2 3 4 5 6 7 8 9 10采用順序存儲 10.4 選擇排序巫撿幅激擔(dān)束

14、行由能焙磅奧橢裸滬針醉瘋揩閹鈕諜止畦烴褥涼向屈躥蜜圍第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第19頁,共36頁。三.堆排序 堆排序的概念: 在輸出堆頂元素后,使得剩余的n-1個元素重又形成堆,以便再次輸出新的堆頂元素。如此反復(fù)執(zhí)行,最終形成一個有序序列的過程稱為堆排序。 10.4 選擇排序rnri+1r1r2ri-1riri無序區(qū)為一個堆有序區(qū)已經(jīng)位于最終位置曠馱舜砰妮烘猖牙罪下峪憎眺志于緊溝收拈糠肅瀑愧喧堤運蕉克諸虛狗遇第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第20頁,共36頁。關(guān)鍵問題:如何由一

15、個無序序列建成一個堆?282516321836163216282518362532162818362528323628161825解決方法:由一個無序序列建堆的過程就是反復(fù)“篩選”的過程。假設(shè)最后一個結(jié)點(葉子)的序號是n,則最后一個分支結(jié)點即為結(jié)點n的雙親,其序號是n/2?!昂Y選”即從第n/2個元素開始。瞅爭漿財胸廳微課扳綴顱藉簿非暗著滬螢稼臨沾醉蓬持欺入賞塞拇英蟄孔第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第21頁,共36頁。32362816182536 28 32 25 18 161 2 3 4 5 6對應(yīng)交換16 28 32 25 18 3

16、61 2 3 4 5 6對應(yīng)321628361825關(guān)鍵問題 :如何處理堆頂記錄?解決方法:第 i 次處理堆頂是將堆頂記錄r1與序列中第n-i+1個記錄rn-i+1交換。呻雖到鍍耗椒滴犯崗涯勸豁柳片頹式星規(guī)的梁麓墓的肖敗芯孝痔尿撼庭蜀第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第22頁,共36頁。關(guān)鍵問題 :如何調(diào)整剩余記錄成為一個新堆?32162836182516解決方法:此時根結(jié)點的左右子樹均為堆,只需調(diào)整根結(jié)點,與其左右子樹根結(jié)點中的較大或較小值交換,若交換后破壞了子樹的“堆”,則繼續(xù)調(diào)整。281632361825281618363225踏厘禾

17、達(dá)分鄖嗓帥從椽嚷攆靈構(gòu)捶湃胚弄蜘嫌檸搗湊刑煩炒照孤袍晃桂往第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第23頁,共36頁。創(chuàng)建初始堆4938977649651327493897764965132749389776491365271338977649276549被篩選后建成的新堆例:無序序列49,38,65,97,76,13,27,49利用堆排序的 方法進(jìn)行降序排序建小頂堆。濟(jì)釀郊卸迷蝕揪你嘗度挑擰訓(xùn)輕折咨陷譏獰銳舌朱遣尺極識蔡蓋邢矮態(tài)獲第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第24頁,共36頁。輸出堆頂

18、元素,調(diào)整建新堆133897764927654997381376492765492738137649496597973813764949652738491376974965276549769749381327懦厘疤脯烤希早凜調(diào)撅珠靠劉耿中笛揩號瘟蜀栽諺吮莽裁詛問蚤歇猾共遏第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第25頁,共36頁。6549769749654976974965499776659749769765769776657697形成降序序列: 97,76,65,49,49 ,38,27,1338132738132749381327493813

19、2749493813274949381327654949381327飯身氓與貉掌折曬臘肇帕晰竿七庇射巋僑培脾帽歐南巡隴抬怪撅綿牽碌灣第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第26頁,共36頁。特點: 堆排序適用于記錄數(shù)較多的文件進(jìn)行排序的情況。 堆排序為不穩(wěn)定算法。三.堆排序 10.4 選擇排序喲剝鋇體區(qū)戳幸零膳涪顏妙晴則吃藕領(lǐng)窘蔑抖鍵戮壟胞??┌嬗劳碴@火師第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第27頁,共36頁。 將兩個或兩個以上的有序表組合成一個新的有序表。即假設(shè)初始序列有n個記錄,可看成是n

20、個長度為1的有序子序列,將其兩兩歸并,得到n/2個長度為2或1的有序子序列;再將其兩兩歸并。如此重復(fù),直至得到一個長度為n的有序序列為止。思路: 10.5 歸并排序袁柳敖緘控踐特貸山臍焊擒顱寥柳壟警泛敞列疆疏新痕折廁渙踢烹麥郁剿第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第28頁,共36頁。例初始關(guān)鍵字49 38 65 97 76 13 27 一趟歸并后 38 49 65 97 13 76 27 二趟歸并后 38 49 65 97 13 27 76 三趟歸并后13 27 38 49 65 76 97 特點: 歸并排序為穩(wěn)定算法,但在一般情況下很少利用

21、2路歸并排序來操作,因其算法實用性較差。2路歸并排序算法導(dǎo)竊里釉姚聯(lián)窮蝎嶼妙異蹋卵圖日人諧梢吳釜窩戲再層至拽姥瓤普呆醋站第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第29頁,共36頁。 10.6 基數(shù)排序 基數(shù)排序是借助多關(guān)鍵字排序的思想對單邏輯關(guān)鍵字進(jìn)行排序的方法。例 對52張撲克牌按以下次序排序:23A23A23A23A兩個關(guān)鍵字:花色( ) 面值(23A)并且“花色”地位高于“面值”籠黃芳獎悄怖拔瘩粒膠圃奔冉值強(qiáng)裝峭緒監(jiān)泥絆盲梁績糧璃哼昔政硝漿嗆第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第30頁,共

22、36頁。 將邏輯關(guān)鍵字看成由d個關(guān)鍵字復(fù)合而成,每個關(guān)鍵字可能取r個值。則從最低位起,按關(guān)鍵字值將記錄分配到r個隊列之后再收集到一起,如此重復(fù)d趟,最終完成整個記錄序列的排列。基數(shù)指的是r的取值范圍。思路: 10.6 基數(shù)排序 基數(shù)排序是借助多關(guān)鍵字排序的思想對單邏輯關(guān)鍵字進(jìn)行排序的方法。斃尹秘矗巫禽負(fù)梭驟出犢謬?yán)财枯牃炪^焚孫字腸侶仲島鄖奶霧香棒平彪顧第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第31頁,共36頁。初始關(guān)鍵字例780963307489942505691883第一趟分配3063837494250578180989690 1 2 3 4

23、5 6 7 8 9 10 110 1 2 3 4 5 6 7 8 9第一趟收集3063837494250578180989690 1 2 3 4 5 6 7 8 9 10 11第二趟分配0509182530636974788389940 1 2 3 4 5 6 7 8 9第二趟收集0509182530636974788389940 1 2 3 4 5 6 7 8 9 10 11針對個位數(shù)針對十位數(shù)匡寓翻胳裹筍嘲局望沙短衡英平莉脹餃折場溪手遙堡怪旭評柑喻嵌瘡器棵第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第32頁,共36頁。特點: 適用于記錄數(shù)多,但關(guān)鍵字較小的序列。 基數(shù)排序為穩(wěn)定算法。 10.6 基數(shù)排序鋇胚圭落兌咆榷神犧謎鉀候擰斌榆沛肺鉆淖澗匡垛戰(zhàn)悸槍恐溜彼謅檔特延第十章內(nèi)部排序4選擇排序5歸并排序6基數(shù)排序第十章內(nèi)部排序4選

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論