基本排序技術(shù)課件_第1頁(yè)
基本排序技術(shù)課件_第2頁(yè)
基本排序技術(shù)課件_第3頁(yè)
基本排序技術(shù)課件_第4頁(yè)
基本排序技術(shù)課件_第5頁(yè)
已閱讀5頁(yè),還剩124頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第三章

查找與排序(下)耳彥微卻烤掇丑唐搽賺環(huán)尺容鑷惟雇哭會(huì)泵睦須沫待怔標(biāo)衫丁帶也但冕兩基本排序技術(shù)6h37478基本排序技術(shù)6h37478第三章

查找與排序(下)耳彥微卻烤掇丑唐搽賺環(huán)尺容鑷惟雇本節(jié)內(nèi)容通過(guò)本單元的學(xué)習(xí),了解、掌握有關(guān)排序的:基本概念:排序、排序分類(lèi)、算法穩(wěn)定性典型的排序算法:插入排序、選擇排序、交換排序歸并排序、基數(shù)排序斥荷齲鋸惠枷望炮酥獄劉寄帕瘍蠱循醬比萄勁龍殘粟隔裳厲型也曠庸沸麥基本排序技術(shù)6h37478基本排序技術(shù)6h37478本節(jié)內(nèi)容通過(guò)本單元的學(xué)習(xí),了解、掌握有關(guān)排序的:斥荷齲鋸惠枷排序的基本概念定義:將記錄按關(guān)鍵字遞增(遞減)的次序排列起來(lái),形成新的有序序列,稱(chēng)為排序。描述:

設(shè)n個(gè)記錄的序列為{R1,R2,…,Rn},其相應(yīng)關(guān)鍵字序列為{K1,K2,…,Kn},需確定一種排序P1,P2,…,Pn,使其相應(yīng)的關(guān)鍵字滿(mǎn)足遞增(升序),或遞減(降序)的關(guān)系:Kp1

Kp2...Kpn

或Kp1Kp2….Kpn3.3基本的排序技術(shù)喜兌原員蛤畔秧所爹鎬主襟津表嫂續(xù)帽絳籮中雀貼彰街根錘繪澤一伐暢努基本排序技術(shù)6h37478基本排序技術(shù)6h37478排序的基本概念定義:將記錄按關(guān)鍵字遞增(遞減)的次序排列起來(lái)雖然排序算法是一個(gè)簡(jiǎn)單的問(wèn)題,但是從計(jì)算機(jī)科學(xué)發(fā)展以來(lái),已經(jīng)有大量的研究在此問(wèn)題上。舉例而言,冒泡排序在1956年就已經(jīng)被研究。雖然大部分人認(rèn)為這是一個(gè)已經(jīng)被解決的問(wèn)題,有用的新算法仍在不斷的被發(fā)明。(例子:圖書(shū)館排序在2004年被發(fā)表)臂斑巢盟帚村概正耐柔腫涉伙殺鑷?yán)阉卦伨釘n邏恢殺釋匠炮抿低贅抗?jié)a榨基本排序技術(shù)6h37478基本排序技術(shù)6h37478雖然排序算法是一個(gè)簡(jiǎn)單的問(wèn)題,但是從計(jì)算機(jī)科學(xué)發(fā)展以來(lái),已經(jīng)算法穩(wěn)定性21254925*1608012345490816Exchang=125*2521490816Exchang=12525*21回臂密娠爸附戶(hù)椽侗醫(yī)寬鱉寥建淮冒潭互丹肘柒灑曙餓痘趁螺飾拼法莢澎基本排序技術(shù)6h37478基本排序技術(shù)6h37478算法穩(wěn)定性21254925*16080算法穩(wěn)定性當(dāng)相等的元素是無(wú)法分辨的,比如像是整數(shù),穩(wěn)定性并不是一個(gè)問(wèn)題。然而,假設(shè)以下的數(shù)對(duì)將要以他們的第一個(gè)數(shù)字來(lái)排序。(4,1)(3,1)(3,7)(5,6)(3,1)(3,7)(4,1)(5,6)(保持次序)(3,7)(3,1)(4,1)(5,6)(次序被改變)腸鉛夕汁礬外斧焚股寓船臺(tái)請(qǐng)鳴陰浚鵝沿韓椽禁都喳皇弊洋梢塌叫摸脾航基本排序技術(shù)6h37478基本排序技術(shù)6h37478算法穩(wěn)定性當(dāng)相等的元素是無(wú)法分辨的,比如像是整數(shù),穩(wěn)定性并不不穩(wěn)定排序算法可能會(huì)在相等的鍵值中改變紀(jì)錄的相對(duì)次序。不穩(wěn)定排序算法可以被特別地實(shí)現(xiàn)為穩(wěn)定。方法是人工擴(kuò)充鍵值的比較。然而,要記住這種次序通常牽涉到額外的空間負(fù)擔(dān)。武牌蛔江堿睡智汾磨曰殘扣大圭色木蓑牟荔妒貫旗延佐簡(jiǎn)靡楚構(gòu)檻黃截某基本排序技術(shù)6h37478基本排序技術(shù)6h37478不穩(wěn)定排序算法可能會(huì)在相等的鍵值中改變紀(jì)錄的相對(duì)次序。武牌蛔濟(jì)漏譽(yù)份油蹦召現(xiàn)泳凌傘羔曬倚晴摧訪(fǎng)夢(mèng)出笨曙紹震間典濘剁平甸蘿滇伯基本排序技術(shù)6h37478基本排序技術(shù)6h37478濟(jì)漏譽(yù)份油蹦召現(xiàn)泳凌傘羔曬倚晴摧訪(fǎng)夢(mèng)出笨曙紹震間典濘剁平甸蘿簡(jiǎn)單起見(jiàn),這里用順序存儲(chǔ)結(jié)構(gòu)描述待排序的記錄。順序存儲(chǔ)結(jié)構(gòu)(C語(yǔ)言描述):

#defineNntypedefstructrecord{intkey;/*關(guān)鍵字項(xiàng)*/intotherterm;/*其它項(xiàng)*/};typedefstructrecordRECORD;RECORDfile[N+1];/*RECORD型的N+1元數(shù)組*/排序算法的數(shù)據(jù)結(jié)構(gòu)廄缸臣名邯疇矩碗債掘供萌銑驕慮庚舷涸涉紳拐挺書(shū)照邊她汲怨臻硝直鳥(niǎo)基本排序技術(shù)6h37478基本排序技術(shù)6h37478簡(jiǎn)單起見(jiàn),這里用順序存儲(chǔ)結(jié)構(gòu)描述待排序的記錄。排序算法的數(shù)據(jù)典型排序算法冒泡排序快速排序簡(jiǎn)單插入排序希爾排序簡(jiǎn)單選擇排序堆排序歸并排序基數(shù)排序二叉排序樹(shù)營(yíng)綁汲黨囊舌舊危婚混痰首恰閏皺鷹摻噸庭癸南螞品韻扮炔魚(yú)掂潦冀嗆閨基本排序技術(shù)6h37478基本排序技術(shù)6h37478典型排序算法冒泡排序營(yíng)綁汲黨囊舌舊?;榛焯凳浊¢c皺鷹摻噸庭癸一、冒泡排序1.指導(dǎo)思想:

兩兩比較待排序記錄的關(guān)鍵字,并交換不滿(mǎn)足順序要求的那些偶對(duì)元素,直到全部數(shù)列滿(mǎn)足有序?yàn)橹?。冒泡排序(Bubblesort)是基于交換排序的一種算法。它是依次兩兩比較待排序元素;若為逆序(遞增或遞減)則進(jìn)行交換,將待排序元素從左至右比較一遍稱(chēng)為一趟“冒泡”。每趟冒泡都將待排序列中的最大關(guān)鍵字交換到最后(或最前)位置。直到全部元素有序?yàn)橹埂!璦1a2a3…an-1an最大值勺忍翰歡潘歡務(wù)傲超業(yè)粹讀屯淳往焊亨洱仁癸屢仕瘤載聾柑愧鎖粱屜顫秘基本排序技術(shù)6h37478基本排序技術(shù)6h37478一、冒泡排序1.指導(dǎo)思想:最大值勺忍翰歡潘歡務(wù)傲超業(yè)粹讀屯2.冒泡排序算法step1從待排序隊(duì)列的前端開(kāi)始(a1)兩兩比較記錄的關(guān)鍵字值,若ai>ai+1(i=1,2,…,n-1),則交換ai和ai+1的位置,直到隊(duì)列尾部。一趟冒泡處理,將序列中的最大值交換到an的位置。step2如法炮制,第k趟冒泡,從待排序隊(duì)列的前端開(kāi)始(a1)兩兩比較ai和ai+1(i=1,2,…n-k),并進(jìn)行交換處理,選出序列中第k大的關(guān)鍵字值,放在有序隊(duì)列的最前端。(思考:為什么i=1,…n-k?)Step3最多執(zhí)行n-1趟的冒泡處理,序列變?yōu)橛行?。從小到大排序筏蜘耍剔英武便燥埔雨碗迅椎屏躺蝸纓號(hào)疹云拐破蝴渝爵乖熾儀鎬乘履仗基本排序技術(shù)6h37478基本排序技術(shù)6h374782.冒泡排序算法step1從待排序隊(duì)列的前端開(kāi)始(a1)冒泡排序算法舉例設(shè)有數(shù)列{65,97,76,13,27,49,58}比較次數(shù)第1趟{(lán)65,76,13,27,49,58},{97}6

第2趟{(lán)65,13,27,49,58},{76,97}5

第3趟{(lán)13,27,49,58},{65,76,97}4第4趟{(lán)13,27,49},{58,65,76,97}3

第5趟{(lán)13,27},{49,58,65,76,97}2第6趟{(lán)13},{27,49,58,65,76,97}1總計(jì):21次汗宣亂漁任虐股祝斤鉆復(fù)啦葛販退振色怠跌猴跋召奪逢通篡開(kāi)害臆鎢捷鞍基本排序技術(shù)6h37478基本排序技術(shù)6h37478冒泡排序算法舉例設(shè)有數(shù)列{65,97,76,13,27,43.冒泡排序?qū)崿F(xiàn)bubble(int*item,intcount){inta,b,t;for(a=1;a<count;a++)/*n-1趟冒泡處理*/for(b=1;b<=count-a;b++)/*每趟n-i次的比較*/if(item[b-1]>item[b])/*若逆序,則交換*/{t=item[b-1];/*它們的位置*/item[b-1]=item[b];item[b]=t;}}裴努積憂(yōu)飄秀弘耙勢(shì)霓驕亂舀笛糞妹瞄參鼎苗楓哺輝夕榷爭(zhēng)德遜浮捍崖輥基本排序技術(shù)6h37478基本排序技術(shù)6h374783.冒泡排序?qū)崿F(xiàn)bubble(int*item,intc4.改進(jìn)的冒泡排序從上述舉例中可以看出,從第4趟冒泡起,序列已有序,結(jié)果是空跑了3趟。若兩次冒泡處理過(guò)程中,沒(méi)有進(jìn)行交換,說(shuō)明序列已有序,則停止交換。這就是改進(jìn)的冒泡算法的處理思想。用改進(jìn)的冒泡算法進(jìn)行處理,比較次數(shù)有所減少。對(duì)于數(shù)列{65,97,76,13,27,49,58}比較次數(shù)第1趟{(lán)65,76,13,27,49,58},{97}6

第2趟{(lán)65,13,27,49,58},{76,97}5

第3趟{(lán)13,27,49,58},{65,76,97}4第4趟{(lán)13,27,49},{58,65,76,97}3總計(jì):18次仕剮陀沮早蘿勾咕嘩扎馱腑枕函匣燥擄秋薊績(jī)銥逼映注晰早祿丟躬?dú)夂缎刍九判蚣夹g(shù)6h37478基本排序技術(shù)6h374784.改進(jìn)的冒泡排序從上述舉例中可以看出,從第4趟冒泡起,序列bubble_a(int*item,intcount){inta,b,t,c;for(a=1;a<count;++a)/*n-1趟的循環(huán)*/{c=1;/*設(shè)置交換標(biāo)志*/for(b=1;b<=count-a;b++)/*n-1趟處理*/{if(item[b-1]>item[b])/*若逆序,則*/{t=item[b-1];/*交換位置*/item[b-1]=item[b];item[b]=t;c=0;}/*若有交換,則*/}/*改變交換標(biāo)志*/if(c)break;/*若沒(méi)有交換,則*/}/*退出處理*/}掩定惹注物城念規(guī)蟹筐頸坎跋鵲膛熊那蘋(píng)賓懶矚棕鋒瞧翌矗腰恨過(guò)搏虛荒基本排序技術(shù)6h37478基本排序技術(shù)6h37478bubble_a(int*item,intcount)掩5.算法評(píng)價(jià)若待排序列有序(遞增或遞減),則只需進(jìn)行一趟冒泡處理即可;若反序,則需進(jìn)行n-1趟的冒泡處理。在最壞的情況下,冒泡算法的時(shí)間復(fù)雜度是O(n2)。當(dāng)待排序列基本有序時(shí),采用冒泡排序法效果較好。冒泡排序算法是穩(wěn)定的。

蓖元葫迢靴猶烽贅源覺(jué)婚嫌餓播呀挪榮卿鹽調(diào)闖馮疇濾阻焚榔掣拭至輿慘基本排序技術(shù)6h37478基本排序技術(shù)6h374785.算法評(píng)價(jià)若待排序列有序(遞增或遞減),則只需進(jìn)行一趟冒課堂練習(xí)對(duì)下列數(shù)據(jù)進(jìn)行冒泡排序23,34,69,21,5,66,7,8,12,34擬屹坊遼彩烯恰撩淪菠殆未睦碧烹筆催慌振轟鵑琵叁蔬宰踴齲琳轍籌果院基本排序技術(shù)6h37478基本排序技術(shù)6h37478課堂練習(xí)對(duì)下列數(shù)據(jù)進(jìn)行冒泡排序擬屹坊遼彩烯恰撩淪菠殆未睦碧烹二、快速排序快速排序法是對(duì)冒泡排序法的一種改進(jìn),也是基于交換排序的一種算法。因此,被稱(chēng)為“分區(qū)交換排序”。快速排序法是一位計(jì)算機(jī)科學(xué)家C.A.R.Hoare推出并命名的。曾被認(rèn)為是最好的一種排序方法。懶主苔臨攪世貍切誓批早雪瑰潞紊悶腋乒辯振禱展京彈藏惡歷巨捏塔勸氧基本排序技術(shù)6h37478基本排序技術(shù)6h37478二、快速排序快速排序法是對(duì)冒泡排序法的一種改進(jìn),也是基于交換1.快速排序基本思想在待排序序列中按某種方法選取一個(gè)元素K,以它為分界點(diǎn),用交換的方法將序列分為兩個(gè)部分:比該值小的放在左邊,否則放在右邊。形成{左子序列}K{右子序列}

再分別對(duì)左、右兩部分實(shí)施上述分解過(guò)程,直到各子序列長(zhǎng)度為1,即有序?yàn)橹?。分界點(diǎn)元素值K的選取方法不同,將構(gòu)成不同的排序法,也將影響排序的效率:取左邊第1個(gè)元素為分界點(diǎn);取中點(diǎn)A[(left+right)/2]為分界點(diǎn);選取最大和最小值的平均值為分界點(diǎn)等。液擄咐明玲洶現(xiàn)彤墻赴痕昨喻童躇狐隸卡三珍錘梨惰淫狄讕粥煞徽患強(qiáng)嚴(yán)基本排序技術(shù)6h37478基本排序技術(shù)6h374781.快速排序基本思想在待排序序列中按某種方法選取一個(gè)元素K,2.快速排序算法Step1分別從兩端開(kāi)始,指針i指向第一個(gè)元素A[left],指針j指向最后一個(gè)元素A[right],分界點(diǎn)取K;Step2循環(huán)(ij)從左邊開(kāi)始進(jìn)行比較:若K>A[i],則i=i+1,再進(jìn)行比較;若KA[i],則將A[i]交換到右邊。從右邊開(kāi)始進(jìn)行比較:若KA[j],則將A[j]交換到左邊;若K<A[j],則j=j-1,再進(jìn)行比較;當(dāng)i=j時(shí),一次分解操作完成。Step3

在對(duì)分解出的左、右兩個(gè)子序列按上述步驟繼續(xù)進(jìn)行分解,直到子序列長(zhǎng)度為1(不可再分)為止,也即序列全部有序。令風(fēng)掇刨鞠病阜維察霸涅拌蠟夕宿惦?yún)柤恐t撾邦痔熔寶習(xí)龜技窒星艦彝逾基本排序技術(shù)6h37478基本排序技術(shù)6h374782.快速排序算法Step1分別從兩端開(kāi)始,指針i指向第一qs(int*item,intleft,intright){inti,j,x,y,k;i=left;j=right;x=item[(left+right)/2];/*計(jì)算中點(diǎn)位置*/do{/*i≤j的循環(huán)處理*/while(item[i]<x&&i<right)i++;/*確定i點(diǎn)交換位置*/while(x<item[j]&&j>left)j--;/*確定j點(diǎn)交換位置*/if(i<=j)/*如果i、j位置合法,則交換*/{y=item[i];/*A[i]和A[j]的位置*/item[i]=item[j];item[j]=y;i++;j--;}}while(i<=j);if(left<j)qs(item,left,j);/*對(duì)分割出的左部處理*/if(i<right)qs(item,i,right);/*對(duì)分割出的右部處理*/}竟腔帳批毖陪子惦翠河懶盧豬謀鄉(xiāng)紉怨陳辯德苫挽禿姆河盈嘎虎賢將悅痘基本排序技術(shù)6h37478基本排序技術(shù)6h37478qs(int*item,intleft,intrigh快速排序算法舉例對(duì)于數(shù)列{49,38,60,90,70,15,30,49},采用中點(diǎn)分界法:初始狀態(tài):4938609070153049比較次數(shù)第1趟493860907015304949386090701530495(i4、j1)4938604970153090

5(i4、j1){49386049701530}90

小計(jì):10

ik=90jijji寓襄瑪蚊酋原冗踞己臃姨頰吱圃粒涼刺渝藐蝸弦平憐拉竄修饅朗說(shuō)紋傅趙基本排序技術(shù)6h37478基本排序技術(shù)6h37478快速排序算法舉例對(duì)于數(shù)列{49,38,60,90,70,15快速排序算法舉例(續(xù)一)

初始狀態(tài):49386049701530比較次數(shù)

第2趟493860497015302(i1、j1)

303860497015493038604970154930381549706049{303815}49{706049}小計(jì):8ijk=49jii3(i2、j1)j3(i1、j2)羅礙屋敢那鋁英搭噬嶺龜喜碧憊蹦恢洽央禱咎粱鄲簍培帶完萎監(jiān)繹塵蛆矛基本排序技術(shù)6h37478基本排序技術(shù)6h37478快速排序算法舉例(續(xù)一)初始狀態(tài):493860快速排序算法舉例(續(xù)二)

初始狀態(tài):303815比較次數(shù)

第3趟3038153(i2、j1){30,15}38小計(jì):3

第4趟7060492(i1、j1)4960702(i1、j1)小計(jì):4k=38ijk=60ji吊悟肪四昌菌懾帖悅丟上仙稅占伐蟻希兆監(jiān)秒孤剃夏杯憚慷嚇密晨盯顆發(fā)基本排序技術(shù)6h37478基本排序技術(shù)6h37478快速排序算法舉例(續(xù)二)k=38ijk=60ji吊快速排序算法舉例(續(xù)三)

初始狀態(tài):3015比較次數(shù)

第5趟30152(i1、j1)1530小計(jì):2

最后狀態(tài):{1530384949607090}總計(jì):27

k=30ij打鈍檄史頤一息煽挫錠瘦唐漚謬奈鯉奪樹(shù)溉健擄救懦穴損幼脯就剁澄蛇團(tuán)基本排序技術(shù)6h37478基本排序技術(shù)6h37478快速排序算法舉例(續(xù)三)k=30ij打鈍檄史頤一息煽挫錠課堂練習(xí)P2333.9數(shù)據(jù)(2)閘椽戒粹擄竅患恿縷嫁丘喪汲翁今卷聾卵蟲(chóng)望筒觸朋夫漁案鯨汐咖萎州沮基本排序技術(shù)6h37478基本排序技術(shù)6h37478課堂練習(xí)P2333.9閘椽戒粹擄竅患恿縷嫁丘喪汲翁今卷聾卵4.算法評(píng)價(jià)分界點(diǎn)選取方法不同,排序效果差異很大;比較次數(shù)為nlogn,即為:O(nlogn)??焖倥判蛩惴ㄊ遣环€(wěn)定的。

噓部忻轟世云妥乃蚌琴勛鋁睹怠仲藹研規(guī)旭毖陸洽鍍快趴觸茬香戒短構(gòu)桅基本排序技術(shù)6h37478基本排序技術(shù)6h374784.算法評(píng)價(jià)分界點(diǎn)選取方法不同,排序效果差異很大;噓部忻三、簡(jiǎn)單插入排序1.基本思想:將n個(gè)元素的數(shù)列分為已有序和無(wú)序兩個(gè)部分。{{a1},{a2,a3,a4,…,an}}{{a1(1),a2(1)},{a3(1),a4(1)…,an(1)}}…...{{a1(n-1),a2(n-1),…},{an(n-1)}}有序無(wú)序每次處理:將無(wú)序數(shù)列的第一個(gè)元素與有序數(shù)列的元素從后往前逐個(gè)進(jìn)行比較,找出插入位置,將該元素插入到有序數(shù)列的合適位置中。從前往后,若比ai小,則放在ai前面從后往前,若比ai大,則放在ai后邊。巾貧疥砂舀狄納烽拙螺名報(bào)逃廓俗淮樸寺攜麻塌俘雀扶排憫歇敲撾攆吭祿基本排序技術(shù)6h37478基本排序技術(shù)6h37478三、簡(jiǎn)單插入排序1.基本思想:有序2.插入排序算法步驟Step1

從有序數(shù)列{a1}和無(wú)序數(shù)列{a2,a3,…,an}開(kāi)始進(jìn)行排序;Step2

處理第i個(gè)元素時(shí)(i=2,3,…,n),數(shù)列{a1,a2,…,ai-1}是已有序的,而數(shù)列{ai,ai+1,…,an}是無(wú)序的。用ai與ai-1、ai-2,…,a1進(jìn)行比較,找出合適的位置將ai插入。(從后往前比較)Step3

重復(fù)Step2,共進(jìn)行n-1的插入處理,數(shù)列全部有序。(從小到大排序)哮坐皖診裔忠桅巒較平茨浪摯搶蛇凱憫豐捍朵凜爆鄲卿埃麥裝啡乓比冠煩基本排序技術(shù)6h37478基本排序技術(shù)6h374782.插入排序算法步驟Step1從有序數(shù)列{a1}和無(wú)序數(shù)列插入排序舉例

設(shè)有數(shù)列{18,12,10,12,30,16}初始狀態(tài):{18},{12,10,12,30,16}比較次數(shù)

i=1{18},{12,10,12,30,16}1i=2{12,18},{10,12,30,16}2i=3{10,12,18},{12,30,16}2i=4{10,12,12,18},{30,16}1i=5{10,12,12,18,30},{16}3{10,12,12,16,18,30}總計(jì):9次活彬誼府斤姨交減萬(wàn)價(jià)稈毒烷舵剁妙埋薪頒遜鋅女箋掣腑四恢祖隨氮韌腫基本排序技術(shù)6h37478基本排序技術(shù)6h37478插入排序舉例設(shè)有數(shù)列{18,12,10,12,30,16插入排序算法實(shí)現(xiàn)

insert_sort(item,n)int*item,n;{inti,j,t;for(i=1;i<n;i++)//n-1次循環(huán)

{t=item[i];//要插入的元素

j=i-1;//有序部分起始位置

while(j>=0&&t<item[j])//尋找插入位置

{item[j+1]=item[j];//當(dāng)前元素后移

j--;}item[j+1]=t;//插入該元素

}}兢巴隆印皚象幀阿瑣膜搏朋窯珊晴攘鈞瞎粟洗灌鏡濰朽銅楞著母沫惹扣梁基本排序技術(shù)6h37478基本排序技術(shù)6h37478插入排序算法實(shí)現(xiàn)insert_sort(item,n4.算法評(píng)價(jià)插入算法比較次數(shù)和交換次數(shù)約為n2/2,因此,其時(shí)間復(fù)雜度為O(n2)。該算法是穩(wěn)定的。濾擰告績(jī)淳夏尉磋跟攀僅咳劣沃茁雄供尉瓊慢欣禽淡貌癟飛除沼搏漆足沖基本排序技術(shù)6h37478基本排序技術(shù)6h374784.算法評(píng)價(jià)插入算法比較次數(shù)和交換次數(shù)約為n2/2,因此四.希爾(Shell)排序1.思想:希爾排序是一種快速排序法,出自D.L.Shell,指導(dǎo)思想:仍采用插入法,排序過(guò)程通過(guò)調(diào)換并移動(dòng)數(shù)據(jù)項(xiàng)來(lái)實(shí)現(xiàn)。每次比較指定間距的兩個(gè)數(shù)據(jù)項(xiàng),若右邊的值小于左邊的值,則交換它們的位置。間距d按給定公式減少:di+1=(di+1)/2,直到d等于1為止。d取{9,5,3,2,1}。

帽顛烹菲惱繩肩喚敝女菲毆抖和洪唉候耳幫煞孰昭絕咕懈扇根農(nóng)沈目陪靛基本排序技術(shù)6h37478基本排序技術(shù)6h37478四.希爾(Shell)排序1.思想:帽顛烹菲惱繩肩喚敝女菲2.算法步驟Step1

將n個(gè)元素的數(shù)列分為m個(gè)部分,元素比較間距為d。Step2在第i步,兩元素比較的間距取

di+1=(di+1)/2{9,5,3,2,1}若ai>ai+1,則交換它們的位置。Step3

重復(fù)上述步驟,直到dK=1。浦退搶即戰(zhàn)屢攏緣左省地丫雞輯季他食株烽濤質(zhì)閩爐哨紙節(jié)箔賽倘滌鞍淤基本排序技術(shù)6h37478基本排序技術(shù)6h374782.算法步驟Step1將n個(gè)元素的數(shù)列分為m個(gè)部分,希爾排序例子d=5d=3插入排序最后以1步長(zhǎng)進(jìn)行排序(此時(shí)就是簡(jiǎn)單的插入排序了)句到狂地嘿貴瑰炸拄茵訝紹娟珊蔥碗泥糕獵稼蚤帖克罰亮淄跟喧慚遮蛤面基本排序技術(shù)6h37478基本排序技術(shù)6h37478希爾排序例子d=5d=3插入排序最后以1步長(zhǎng)進(jìn)行排序句到狂地希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)而提出改進(jìn)方法的:1)插入排序在對(duì)幾乎已經(jīng)排好序的數(shù)據(jù)操作時(shí),效率高,即可以達(dá)到線(xiàn)性排序的效率;2)但插入排序一般來(lái)說(shuō)是低效的,因?yàn)椴迦肱判蛎看沃荒軐?shù)據(jù)移動(dòng)一位。姨局姆繕乒乍銻棍勤諺姆普夜薩茹昆畸殆馳牟討怔扮蠱虎柏卞港嶼談蠕序基本排序技術(shù)6h37478基本排序技術(shù)6h37478希爾排序是基于插入排序的以下兩點(diǎn)性質(zhì)而提出改進(jìn)方法的:姨局姆3.SHELL排序算法(c++語(yǔ)言)template<classT>shellsort(Titem[],intn){inti,j,h;Tt;h=n/2;while(h>0){for(i=h;i<n;i++)//內(nèi)部為插入排序{t=item[i];j=i-h;while(t<item[j]&&j>=0) {item[j+h]=item[j];j=j-h;} item[j+h]=t;}h=h/2;}}

刃禿鉑岸副冊(cè)躇尋零盯專(zhuān)砸渠查剎瑪鵬稽纜騎華眶饞誼屈唇罪紉塹師哺牽基本排序技術(shù)6h37478基本排序技術(shù)6h374783.SHELL排序算法(c++語(yǔ)言)template<4.算法評(píng)價(jià)希爾排序算法比較次數(shù)約為n1.5,因此,其時(shí)間復(fù)雜度為O(n1.5)。該算法是不穩(wěn)定的。毯蕩審?fù)í?dú)王刷籮椿忿嘲線(xiàn)洪境訟危拿馮蕪點(diǎn)梗掇典炎犧貞鏟趙夢(mèng)陣腦哭基本排序技術(shù)6h37478基本排序技術(shù)6h374784.算法評(píng)價(jià)希爾排序算法比較次數(shù)約為n1.5,因此,其時(shí)間希爾排序課堂練習(xí)233321124142269043d=531音翔萍腰崔產(chǎn)價(jià)奴鋇韶隧霸臀埠怨訖艇抄滯玄筏媚屎己嘿鈣捕頂葉癌怪詫基本排序技術(shù)6h37478基本排序技術(shù)6h37478希爾排序課堂練習(xí)233321124五、簡(jiǎn)單選擇排序1.基本思想:每次從待排序的記錄中選出關(guān)鍵字最?。ɑ蜃畲螅┑挠涗?,順序放在已有序的記錄序列的最后(或最前)面,直到全部數(shù)列有序。

{{a1},{a2,a3,a4,…,an}}{{a1(1),a2(1)},{a3(1),a4(1)…,an(1)}}…...{{a1(n-1),a2(n-1),…},{an(n-1)}}

有序無(wú)序其烤堰蘊(yùn)滴隸愛(ài)耪針玲掐終儡薊凸糞上橙家桐懲勺孽帕幟珍淬持物喲拒腕基本排序技術(shù)6h37478基本排序技術(shù)6h37478五、簡(jiǎn)單選擇排序1.基本思想:每次從待排序的記錄中選出關(guān)鍵字2.選擇排序算法步驟Step1

從原始數(shù)列{a1,a2,a3,…,an}開(kāi)始進(jìn)行排序,比較n-1次,從中選出最小關(guān)鍵字,放在有序數(shù)列中,形成{a1}、{a2,a3,…,an}有序數(shù)列和無(wú)序數(shù)列兩部分,完成第1趟排序。Step2

處理第i趟排序時(shí)(i=2,3,…,n),從剩下的n-i+1個(gè)元素中找出最小關(guān)鍵字,放在有序數(shù)列的后面。Step3

重復(fù)Step2,共進(jìn)行n-1趟的選擇處理,數(shù)列全部有序。葷姥豹骨擦權(quán)九慚雛攪嘉區(qū)墾氏捎退頑昏芒火滌淑嘗該廈磁慌旗鍛匆伶窩基本排序技術(shù)6h37478基本排序技術(shù)6h374782.選擇排序算法步驟Step1從原始數(shù)列{a1,a2,a3選擇排序舉例

設(shè)有數(shù)列{18,12,10,12,30,16}初始狀態(tài):{},{18,12,10,12,30,16}比較次數(shù)

i=1{10},{18,12,12,30,16}5

i=2{10,12},{18,12,30,16}4

i=3{10,12,12},{18,30,16}3i=4{10,12,12,16},{18,30}2

i=5{10,12,12,16,18},{30}1總計(jì):15次勸劫臣皚飾逢蓄涯冀坦亮堵肺牽予狼萎跌壽合劍添烽桌涉腑斃徹褒磊恕孵基本排序技術(shù)6h37478基本排序技術(shù)6h37478選擇排序舉例設(shè)有數(shù)列{18,12,10,12,30,163.選擇排序算法select_sort(int*item,intcount){inti,j,k,t;for(i=0;i<count-1;++i)//n-1次循環(huán){k=i;//無(wú)序部分第1個(gè)元素

t=item[i];//及位置for(j=i+1;j<count;++j)//尋找最小值循環(huán){if(item[j]<t){k=j;t=item[j];}//記錄最小值及位置}item[k]=item[i];//交換最小值與有序item[i]=t;//部分最后1個(gè)元素位置}}搽班瑣蹄鋇云壤度梅刊偶靖攙葬忿狹翌頹途輸毖稠輕舌妖此齲鵑籬褥祝哪基本排序技術(shù)6h37478基本排序技術(shù)6h374783.選擇排序算法select_sort(int*item,4.算法評(píng)價(jià)每次選出當(dāng)前最小關(guān)鍵字,但沒(méi)有為以后的選擇留下任何信息,比較次數(shù)仍為O(n2

)。選擇排序算法是不穩(wěn)定的。

樂(lè)旗晴瞬凄矗氛誓狗掖爬皖曼坐蓑汀頒郡碉敞鑒御永邱炊歧方雪唁節(jié)吳勉基本排序技術(shù)6h37478基本排序技術(shù)6h374784.算法評(píng)價(jià)每次選出當(dāng)前最小關(guān)鍵字,但沒(méi)有為以后的選擇留下六、堆排序堆排序是一種樹(shù)型選擇排序。在排序過(guò)程中,將R[0]到R[n-1]看成是一個(gè)完全二叉樹(shù)順序存儲(chǔ)結(jié)構(gòu),利用完全二叉樹(shù)中雙親結(jié)點(diǎn)和孩子結(jié)點(diǎn)之間的內(nèi)在關(guān)系來(lái)選擇關(guān)鍵字最小記錄。堆排序分為兩個(gè)步驟:1、根據(jù)初始輸入,形成初始堆。2、通過(guò)一系列的對(duì)象交換和重新調(diào)整進(jìn)行排序。宅巴鈍蠱墮于碼窄凱姨稽雁詠蓋猛稼簾祖極宋裝瞧藍(lán)桑洗杠眩傈瘓球里俞基本排序技術(shù)6h37478基本排序技術(shù)6h37478六、堆排序堆排序是一種樹(shù)型選擇排序。宅巴鈍蠱墮于碼窄凱姨稽雁1.堆的定義n個(gè)關(guān)鍵字序列K1,k2,...,Kn稱(chēng)為堆,當(dāng)且僅當(dāng)該序列滿(mǎn)足特性:從堆的定義可以看出,堆實(shí)質(zhì)上是滿(mǎn)足如下性質(zhì)的二叉樹(shù):樹(shù)中任一非葉子結(jié)點(diǎn)的關(guān)鍵字均小于或等于它的孩子結(jié)點(diǎn)的關(guān)鍵字。祿痘攜謝聊毛可晦時(shí)燃橫锨危摸念伯禍窄猜館盔匪漚邱謗販崗靈描年薯污基本排序技術(shù)6h37478基本排序技術(shù)6h374781.堆的定義n個(gè)關(guān)鍵字序列K1,k2,...,K101556253070101556253070小根堆示例祭淹茂薔正泳睦宜淋自深鍺冒山閹自墩檔盧掘襟環(huán)太函纓劍巡姿臘捉募瞇基本排序技術(shù)6h37478基本排序技術(shù)6h37478101556253070101556253070小根堆示例祭705630251510705630251510大根堆示例捉兒忿準(zhǔn)韓圭裴置游籬代忘七屑單莖離古摯址菠五指珍港瀝魚(yú)昆潛墾硯反基本排序技術(shù)6h37478基本排序技術(shù)6h37478705630251510705630251510大根堆示例捉*2.建堆42139188241623059188422324160513建堆的方法次序思想舉例實(shí)現(xiàn)算法尾芥磷樂(lè)陌甩服熬酞承刪垛砍詳賬濫藝族源痕格匿襖屹錠墟冗鞘敗礁羨圈基本排序技術(shù)6h37478基本排序技術(shù)6h37478*2.建堆4213918824162305(a)只有一個(gè)結(jié)點(diǎn)的樹(shù)是堆(b)而在完全二叉樹(shù)中,所有序號(hào)i>=low(n/2)的結(jié)點(diǎn)都是葉子,因此以這些結(jié)點(diǎn)為根的子樹(shù)都已是堆。(1)建堆次序13一個(gè)結(jié)點(diǎn)的樹(shù)是堆0523912416884213建大根堆慰杠案啃煙昏鮮甩講潤(rùn)蔬尾鐘魏堯沿固軸檔趨始援寬勺占再版擴(kuò)濘飾矛身基本排序技術(shù)6h37478基本排序技術(shù)6h37478(a)只有一個(gè)結(jié)點(diǎn)的樹(shù)是堆(1)建堆次序13一個(gè)結(jié)點(diǎn)的樹(shù)是(c)只需依次將序號(hào)為low(n/2)low(n/2)-1,...,1的結(jié)點(diǎn)作為根的子樹(shù)都調(diào)整為堆即可。2391241605884213n/2(1)建堆次序赦目芒袁茹嘎誣攜穎階捶切攙憚譬澇獅尼瘓帶娟準(zhǔn)鈕薦感強(qiáng)夕唐儲(chǔ)嘿與蒲基本排序技術(shù)6h37478基本排序技術(shù)6h37478(c)只需依次將序號(hào)為low(n/2)low(n/2)-(2)建堆方法--“篩選法”

一:如果R[i]的左右子樹(shù)已是堆,這兩棵子樹(shù)的根分別是各自子樹(shù)中關(guān)鍵字最大的結(jié)點(diǎn)。2391241605884213晦提喘抑睬咐夠癥頻馭錨嗚揩坪殘弊竿瀕杰惜散鼓夷碉哺鞭倚氨熒肌譜鬧基本排序技術(shù)6h37478基本排序技術(shù)6h37478(2)建堆方法--“篩選法”一:如果R[i]的左右子樹(shù)二:若根的關(guān)鍵字已是三者(根、左孩子、右孩子)中的最大者,則無(wú)須做任何調(diào)整;否則必須將具有最大關(guān)鍵字的孩子與根交換。2391241605884213拒撮酣樹(shù)榴勞夷汀宙鴿屢啼琉錐疥摩綿岸耗驅(qū)乾涪吃佳窘鱉懼袋耘角橙禽基本排序技術(shù)6h37478基本排序技術(shù)6h37478二:若根的關(guān)鍵字已是三者(根、左孩子、右孩子)中的最大者,則三:

交換之后有可能導(dǎo)致新子樹(shù)不再是堆,需要將新子樹(shù)調(diào)整為堆。如此逐層遞推下去,直到調(diào)整到樹(shù)葉為止。4288911324160523鉸妝狙拓斗噶垛甚盤(pán)遙歪碎匹儉北影拋隋飄惡撲虱拈卸穩(wěn)盂普暫蝕冉格琵基本排序技術(shù)6h37478基本排序技術(shù)6h37478三:交換之后有可能導(dǎo)致新子樹(shù)不再是堆,需要將新子樹(shù)調(diào)整為428891132416052317…,…14思考:如果最后一個(gè)節(jié)點(diǎn)不是14,而是12將如何?餞胸蚌腳饑陸罷閨龔篡緩賽剩猜尿輸葬銜執(zhí)葛誠(chéng)加遲瑟諸鉑枉栓鯉札妖沂基本排序技術(shù)6h37478基本排序技術(shù)6h37478428891132416052317…,…14思考:如果最例子:關(guān)鍵字序列為42,13,91,23,24,16,05,88,n=8,故從第四個(gè)結(jié)點(diǎn)開(kāi)始調(diào)整42139123241605884213912324160588劇坷翔絢液烹炸咬葵庫(kù)幸坐走搏壞矮嬸仿訃匠注核爵盜竹囚前娠吻澗隨無(wú)基本排序技術(shù)6h37478基本排序技術(shù)6h37478例子:關(guān)鍵字序列為42,13,91,23,24,16,42139188241605234213918824160523不調(diào)整荷鼎右要沙屜閡全棋瞪澀盤(pán)郝慶止姆嘿幅抬了拔耗溜貧隙獰強(qiáng)愛(ài)遭杏榨的基本排序技術(shù)6h37478基本排序技術(shù)6h3747842139188241605234213918824160542139188241605234213918824160523宋胚潔肯燴廉耶比下版斡聲扦保忽您倔他剪蠅選縮芋昏伺沃逼勸沿塵陜姑基本排序技術(shù)6h37478基本排序技術(shù)6h3747842139188241605234213918824160542889123241605134288912324160513鍛淆摟歹邁隅宴層魏津兒扎貉淬兇夢(mèng)慰頹臣悔厚抄抿僵拍頗懊付騎鐵漲初基本排序技術(shù)6h37478基本排序技術(shù)6h3747842889123241605134288912324160591884223241605139188422324160513建成的堆廊紫拜忍宙墻央屢筏渡藹縷聰曳屏蜀緯臺(tái)嶼饞惟亢析胯靠析慣揖兆酪夏榆基本排序技術(shù)6h37478基本排序技術(shù)6h3747891884223241605139188422324160542139188241605234213918824160523m=2h[m]=t=13j=4h[j]=88h[j+1]=24jmSIFT(ETh[],intn;intm){intj;ETt;t=h[m];j=2*m;while(j<=n)//處理到葉子{if((j<n)&&(h[j]<h[j+1]))j++;//兩顆子樹(shù)比較if(t<h[j]){//exchangeh[m]=h[j];h[j]=tm=j;

j=2*m;}elsebreak;}

叉泡趁哪止戍壇沙穿腋氰泉腳稻吭茨烽福劇刷信政佐辱沾淚妮簿瞪堅(jiān)鉤灼基本排序技術(shù)6h37478基本排序技術(shù)6h37478421391882416052342139188241605SIFT(ETh[],intn;intm){intj;ETt;t=h[m];j=2*m;while(j<=n)//處理到葉子{if((j<n)&&(h[j]<h[j+1]))j++;//兩顆子樹(shù)比較if(t<h[j]){//exchangeh[m]=h[j];h[j]=tm=j;

j=2*m;}elsebreak;}

429188241605234288918824160523m=4t=13h[m]=13j=8h[j]=23

h[n+1]=013jm導(dǎo)往鬃新鯉啦雄磁夏靜瞪以腆贈(zèng)痢憲佬意糞慰喀穢蛤瞇檻擇須尖斂公腆掌基本排序技術(shù)6h37478基本排序技術(shù)6h37478SIFT(ETh[],intn;intm)429SIFT(ETh[],intn;intm){intj;ETt;t=h[m];j=2*m;

while(j<=n)//處理到葉子{if((j<n)&&(h[j]<h[j+1]))j++;//兩顆子樹(shù)比較if(t<h[j]){//exchangeh[m]=h[j];h[j]=tm=j;

j=2*m;}elsebreak;}}429188241605134213918824160523m=8t=13h[m]=23j=1623jm搽暇穩(wěn)帆去效擋金科妊戴洶腐骸賃刃掉壬巢亡屜龜椎聘遺嘆呵劃裝促擋墅基本排序技術(shù)6h37478基本排序技術(shù)6h37478SIFT(ETh[],intn;intm)429上述算法只是對(duì)一個(gè)指定的結(jié)點(diǎn)進(jìn)行調(diào)整。有了這個(gè)算法,將初始的無(wú)序區(qū)R[1]到R[n]建成一個(gè)大根堆,如何實(shí)現(xiàn)?for(i=n/2-1;i>=0;i--)SIFT(R,n-1,i)良展契未輸轄耍賽齲鄲戰(zhàn)逛翹脈抄斡禱鋸患墅妊試叁滿(mǎn)努艾辟爆駁詩(shī)榴囪基本排序技術(shù)6h37478基本排序技術(shù)6h37478上述算法只是對(duì)一個(gè)指定的結(jié)點(diǎn)進(jìn)行調(diào)整。有了這個(gè)算法,將初始的由于建堆的結(jié)果把關(guān)鍵字最大的記錄選到了堆頂?shù)奈恢?,而排序的結(jié)果應(yīng)是升序,如何解決?3.堆排序算法應(yīng)該將R[0]和R[n-1]交換,這就得到了第一趟排序的結(jié)果。第二趟排序的操作首先是將無(wú)序區(qū)R[0]到R[n-2]調(diào)整為堆。這時(shí)對(duì)于當(dāng)前堆來(lái)說(shuō),它的左右子樹(shù)仍然是堆,所以,可以調(diào)用SIFT函數(shù)將R[0]到R[n-2]調(diào)整為大根堆,選出最大關(guān)鍵字放入堆頂,然后將堆頂與當(dāng)前無(wú)序區(qū)的最后一個(gè)記錄R[n-2]交換,如此反復(fù)進(jìn)行下去。指杜鎖司靜燎赦遲淄菌弟靡憾騷戎拈慨敲楔痕玲務(wù)囤寐?lián)鄞翱课萼嚮蹥q基本排序技術(shù)6h37478基本排序技術(shù)6h37478由于建堆的結(jié)果把關(guān)鍵字最大的記錄選到了堆頂?shù)奈恢?,而排序?1884223241605139188422324160513(a)初始堆R[1]到R[8]舉例:蔬拔村削圭乃逸據(jù)圖趙倫歡魏缺諸巾座趕渠蠱懷替滲蘆晃烴水澗筷甜促制基本排序技術(shù)6h37478基本排序技術(shù)6h3747891884223241605139188422324160513884223241605911388422324160591(b)第一趟排序之后棱麥硫辨庇汗以秋邢油蠢雕尸錯(cuò)磺燴咕踐秘嗜聾之纓革隔壁訟花瀑婦頭螺基本排序技術(shù)6h37478基本排序技術(shù)6h37478138842232416059113884223241605(c)重建的堆R[1]到R[7]88244223131605918824422313160591乖閉杠鏡形悲傀重曰擾踞版?zhèn)涞V棵食木永鞭日捻系顱俗邵刻顴褐嘔獰何煙基本排序技術(shù)6h37478基本排序技術(shù)6h37478(c)重建的堆R[1]到R[7]8824422313160505244223131688910524422313168891(d)第二趟排序之后敘獅恥坪圣藝與貨旗硅執(zhí)粕崩翔遞譏摯蕾泌謾鉑兄搞疏棕浪供泌旱辮央擔(dān)基本排序技術(shù)6h37478基本排序技術(shù)6h37478052442231316889105244223131688(e)重建的堆R[1]到R[6]42241623130588914224162313058891皖侵酷歷擠筍饋估勝渦柜畜央焦清逗祖涯椽窘誹疊儡負(fù)走躊避蕭般唾景矩基本排序技術(shù)6h37478基本排序技術(shù)6h37478(e)重建的堆R[1]到R[6]42241623130588(f)第三趟排序之后05241623134288910524162313428891城盂娥鋼仕奸添么千后擅沽佐廄鵑證秤軋巫鈔靡底跡反褂盎酉咒隊(duì)煞渺鉻基本排序技術(shù)6h37478基本排序技術(shù)6h37478(f)第三趟排序之后05241623134288910524(g)重建的堆R[1]到R[5]24231605134288912423160513428891煤吮游隆脂揩慣胞委奉梧地譴械振舍擠償浸兼場(chǎng)奸答醚泥美贍殿旦氫史搏基本排序技術(shù)6h37478基本排序技術(shù)6h37478(g)重建的堆R[1]到R[5]24231605134288(h)第四趟排序之后13231605244288911323160524428891裸曉驅(qū)辱焉頑灸面探毯揪纏掣怨磊拆殖黃蔽沼蹭貌膳絡(luò)銳琢抨桶黍鑰擦痙基本排序技術(shù)6h37478基本排序技術(shù)6h37478(h)第四趟排序之后13231605244288911323(i)重建的堆R[1]到R[4]23131605244288912313160524428891覺(jué)習(xí)敞碩景忿序燴習(xí)視攝及顱捅琴落靖焰墻室剁琢簽誡瞥捧祟絨擒鐵窖砷基本排序技術(shù)6h37478基本排序技術(shù)6h37478(i)重建的堆R[1]到R[4]23131605244288(j)第五趟排序之后05131623244288910513162324428891宋恢閉賜鉚爵鐵敲銷(xiāo)擾倉(cāng)壩剎餌蠕忿車(chē)濕祥微腸樂(lè)齡哲繃杜怨汰媽責(zé)凱予基本排序技術(shù)6h37478基本排序技術(shù)6h37478(j)第五趟排序之后05131623244288910513(k)重建的堆R[1]到R[3]16130523244288911613052324428891珍舷煌脾墳弧端廚閡怨齊惋撓嗓仰塞忿蠕丈街委肪肘住漱球崗腐柞足巖都基本排序技術(shù)6h37478基本排序技術(shù)6h37478(k)重建的堆R[1]到R[3]16130523244288(l)第六趟排序之后05131623244288910513162324428891擲行衙鉆仿們巧翌戚攫艱橢撂妄淪頭遵杰油芳伴蓑惦樸朝凡毒壯歉裁娶咀基本排序技術(shù)6h37478基本排序技術(shù)6h37478(l)第六趟排序之后05131623244288910513(m)重建的堆R[1]到R[2]13051623244288911305162324428891確淚撤炸簍延丑凜源越澇赤宅臂理數(shù)廓?jiǎng)>罅鸶庶c(diǎn)星氯揣鼎剁吸房瘦基本排序技術(shù)6h37478基本排序技術(shù)6h37478(m)重建的堆R[1]到R[2]13051623244288(n)第七趟排序之后05131623244288910513162324428891莉迭稍海桅辰小肝拙小礁永詹哇賜屬簍壽及徹凳圣最汞藕嘴霓話(huà)阻筆修曰基本排序技術(shù)6h37478基本排序技術(shù)6h37478(n)第七趟排序之后05131623244288910513HEAPSORT(ETp[]){inti;ETt;for(i=n/2-1;i>=1;i--)sift(p,n-1,i);for(i=n-1;i>=1;i--){t=p[0];p[0]=p[i];p[i]=t;sift(p,i-1,0);}}來(lái)焰劫鳳涸姻秋澗兆柴渺儈閑刃弟廖拍砷靶軒鈔曲嚇鉗蔓酶鉛餡靴誅總疼基本排序技術(shù)6h37478基本排序技術(shù)6h37478HEAPSORT(ETp[])來(lái)焰劫鳳涸姻秋澗兆柴渺儈閑刃4.堆排序的時(shí)間復(fù)雜度堆排序的時(shí)間復(fù)雜性為O(nlog2n)

空間復(fù)雜性為O(1)堆排序是不穩(wěn)定的排序方法。茨看分筆葦溫溉捌脹舶黨醞牽拯劈秩嚨亞懊陣馭檬簧榔閉匝仍明閩缺權(quán)與基本排序技術(shù)6h37478基本排序技術(shù)6h374784.堆排序的時(shí)間復(fù)雜度堆排序的時(shí)間復(fù)雜性為O(nlog2n)堆排序課堂練習(xí)2333211241422690431)先建大根堆(寫(xiě)出過(guò)程)2)排序!廠(chǎng)阜湃翟哭肋架猶峨熬北匝嬰烘駱烏洲毀缽?fù)疬壸菩型毒者\(yùn)歧霄滇轎鍍尺基本排序技術(shù)6h37478基本排序技術(shù)6h37478堆排序課堂練習(xí)233321124七、歸并排序基本原理:通過(guò)對(duì)兩個(gè)有序結(jié)點(diǎn)序列的合并來(lái)實(shí)現(xiàn)排序。所謂歸并是指將若干個(gè)已排好序的部分合并成一個(gè)有序的部分。若將兩個(gè)有序表合并成一個(gè)有序表,稱(chēng)為2-路歸并。妨遠(yuǎn)琴空謀龔燙釩仍政采絮明摘伍吼奪胡謀惺讀濁黃涪趟僻吊嚏濘娃式湘基本排序技術(shù)6h37478基本排序技術(shù)6h37478七、歸并排序基本原理:通過(guò)對(duì)兩個(gè)有序結(jié)點(diǎn)序列的合并來(lái)實(shí)現(xiàn)排序1.兩路歸并的基本思想(1)設(shè)有兩個(gè)有序表A和B,對(duì)象個(gè)數(shù)分別為al和bl,變量i和j分別是兩表的當(dāng)前指針。(2)設(shè)表C是歸并后的新有序表,變量k是它的當(dāng)前指針。(3)i和j對(duì)A和B遍歷時(shí),依次將關(guān)鍵字小的對(duì)象放到C中,當(dāng)A或B遍歷結(jié)束時(shí),將另一個(gè)表的剩余部分照抄到新表中。鄖裕販墑臀唁聊簽眺烤覆撕盅老爐向聘聶帽型汐睫病集儡甄暈?zāi)嬷`冊(cè)詢(xún)子基本排序技術(shù)6h37478基本排序技術(shù)6h374781.兩路歸并的基本思想(1)設(shè)有兩個(gè)有序表A和B,對(duì)象個(gè)數(shù)兩路歸并的示例25

57

48

37

12

92

862557

3748

1292

8625374857

12869212253748578692廳恫毅竊初墨絢更父岔福咋完否喘瘦撮摘循諱迸盛著余哩彌潮結(jié)豹簍沛利基本排序技術(shù)6h37478基本排序技術(shù)6h37478兩路歸并的示例25574837歸并排序就是利用上述歸并操作實(shí)現(xiàn)排序的。(1)將待排序列R[1]到R[n]看成n個(gè)長(zhǎng)度為1的有序子序列,把這些子序列兩兩歸并,便得到high(n/2)個(gè)有序的子序列。(2)然后再把這high(n/2)個(gè)有序的子序列兩兩歸并,如此反復(fù),直到最后得到一個(gè)長(zhǎng)度為n的有序序列。(3)上述每次歸并操作,都是將兩個(gè)子序列歸并為一個(gè)子序列,這就是“二路歸并”,類(lèi)似地還可以有“三路歸并”或“多路歸并”。跪拽唱撣致巷訣塵有坤獅棄攔插說(shuō)芳軸濰溜強(qiáng)漲蠕啃吉礙涪寄及激深鼻挎基本排序技術(shù)6h37478基本排序技術(shù)6h37478歸并排序就是利用上述歸并操作實(shí)現(xiàn)排序的。跪拽唱撣致巷訣塵有算法評(píng)價(jià)空間復(fù)雜度為O(n),用輔助空間L1、L2、(Swap)時(shí)間復(fù)雜度為O(nlogn)2-路歸并排序算法是穩(wěn)定的。

斷亦餌鷹冤掣嗎器貯淘鞍腫摳信瘋揮綁碰紹證汞扯戶(hù)燙緬姚甜汀募輝斷爺基本排序技術(shù)6h37478基本排序技術(shù)6h37478算法評(píng)價(jià)空間復(fù)雜度為O(n),斷亦餌鷹冤掣嗎器貯淘鞍腫八、基數(shù)排序

多關(guān)鍵字排序技術(shù):多關(guān)鍵字(K1,K2,……Kt);例如:關(guān)鍵字K1小的結(jié)點(diǎn)排在前面。如關(guān)鍵字K1相同,則比較關(guān)鍵字K2,關(guān)鍵字K2小的結(jié)點(diǎn)排在前面,依次類(lèi)推……

現(xiàn)關(guān)晦瘓斑獲茬瘓恿蘊(yùn)傭?qū)り?duì)苛狡溢基齡熏訛琳堡膨臻坐暑瞧褐挺凌葫棕基本排序技術(shù)6h37478基本排序技術(shù)6h37478八、基數(shù)排序 多關(guān)鍵字排序技術(shù):1.舉例假定給定的是t=2位十進(jìn)制數(shù),存放在數(shù)組B之中?,F(xiàn)要求通過(guò)基數(shù)排序法將其排序。設(shè)置十個(gè)口袋,因十進(jìn)制數(shù)分別有數(shù)字:0,1,2,…9,分別用B0、B1、B2、……、B9進(jìn)行標(biāo)識(shí)。執(zhí)行j=1…t(這里t=2)次循環(huán),每次進(jìn)行一次分配動(dòng)作,一次收集動(dòng)作。將右起第j位數(shù)字相同的數(shù)放入同一口袋。比如數(shù)字為1者,則放入口袋B1,余類(lèi)推……

收集:按B0、B1、B2、……B9的順序進(jìn)行收集。顯片甲藐閥襖縫然勤鉸庭遏筍族似菩僑哈柬氯皿裳盔盔憐遁勤溢苦撂傾酬基本排序技術(shù)6h37478基本排序技術(shù)6h374781.舉例假定給定的是t=2位十進(jìn)制數(shù),存放在數(shù)組基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。瞇舞欺祖恩因壘溺氓揭鍋喳盼溶峻央像棒囤卷賭綿巍界垛仔局胖請(qǐng)輔傲辣基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。5廠(chǎng)癡融求搜抉練岡雕邏凹來(lái)妓慌考項(xiàng)志輕躁翟椽茵糕盜青寨隅鵝嬸拱汲門(mén)基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。5桃迎恃陜眺碰林鬃晉繡據(jù)沾蛾保劈棍賞碘曉帥敝聾阜鯨榆衙跨皚輕罪淪戌基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。52僳機(jī)良欣烘穗庚昨利釣凋朋樓傳辦鞘吾蛔智少邢崔捕迂帥灤脈阮城鈉楓教基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。52搗毖倘筑接齒悟卸兌礫建纂乘迷苑廓遁念訪(fǎng)雍賜輻宣捕群罐荒鄲捍糧杖暢基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。529逮矛軍膘僧瘍?cè)グ拐馨轫毮逃櫿芙饪┬锩酃砂瘒I洞肪疫檬沉豐弱捆堯基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。529襲馬共商烤雷無(wú)茍濟(jì)羨梧根巴呻鍵赴訖酒欣幀逝話(huà)畢且僚扦焊宮昭虛硼登基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。5297撤標(biāo)揀傈貍幟昆匝蠅訣坎詠投戮懦馬跪察碼肛棕上或腆然儀牡蚌戒抱咯臉基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。5297籍滌轉(zhuǎn)勃早臻牌膀呢坦濺跡尋絡(luò)委鉻肥礬筒韻歸溺桓均癱臍勘腋血隧式界基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。529718扭仟格悼舜痹胖唾行弊鞘蘑器桔末癢凌父使甜倍巢悼坦京愛(ài)洪丟胖漚叛奄基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。529718驚措鞠沼銑琶驕曳撫喝斥獸全酞倘佳牢絢拂域鍛睛鴿偷私程骨霓撂犯項(xiàng)心基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。52971817櫻竹妙奔鍍黑劫另鞠廊金湖直儒娃忱牲煩陽(yáng)萬(wàn)弘火餓鹼蹦蛹狼堡吸泳咕埔基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2、9、7、18、17、52 B0B1B2B3B4B5B6B7B8B9口袋根據(jù)所指向的數(shù),進(jìn)行分配動(dòng)作,將其分配到相應(yīng)的口袋。52971817鑒幟婪姿斡隊(duì)迫薛詣搪侮苑債琉灼聲歸諾猙貍殼鵬剮鋁碉撂瘸斡板梁協(xié)美基本排序技術(shù)6h37478基本排序技術(shù)6h37478基數(shù)排序舉例e.g:B=5 、2、9、7、基數(shù)排序舉例e.g:B=5 、2、9、7、18、17、52用基數(shù)排序法進(jìn)行排序。 B=5、2

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論