




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、排序與漢諾塔算法的設(shè)計(jì)與實(shí)現(xiàn)一、問(wèn)題的提出我們生活中處處都需要排序,例如最普通的排隊(duì)問(wèn)題、排列小游戲等。漢諾塔(又稱(chēng)河內(nèi)塔)問(wèn)題是源于印度一個(gè)古老傳說(shuō)的益智游戲。上帝創(chuàng)造世界的時(shí)候做了三根金剛石柱子,在一根柱子上從下往上安大小順序摞著64片黃金圓盤(pán)。上帝命令婆羅門(mén)把圓盤(pán)從下面開(kāi)始按大小順序重新擺放在另一根柱子上。并且規(guī)定:在小圓盤(pán)上不能放大圓盤(pán),在三根柱子之間一次只能移動(dòng)一個(gè)圓盤(pán),最后把這些圓盤(pán)放在第三根柱子上,并且從下往上是圓盤(pán)大小依次減小的。當(dāng)所有的圓盤(pán)都從第一根柱子移到第三根柱子上時(shí),世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸于盡。二、算法設(shè)計(jì)1、漢諾塔排序的實(shí)現(xiàn)利用了一個(gè)中
2、間幫助柱子B,將A柱子上的五個(gè)盤(pán)按照游戲規(guī)則移動(dòng)到C柱子上。其中利用了函數(shù)的遞歸調(diào)用,圖片的移動(dòng)事件,鼠標(biāo)事件,以及圖片的載入、控件數(shù)組等相關(guān)知識(shí)。(1)用戶(hù)可以隨時(shí)點(diǎn)擊“重新開(kāi)始”按鈕重新開(kāi)始這個(gè)游戲;(2)用戶(hù)可以隨時(shí)點(diǎn)擊“退出”按鈕退出這個(gè)游戲。2、VB排序主要運(yùn)用了冒泡排序法、插入排序法、Bucket排序法、選擇排序法、Shell排序法、快速排序法、Heap排序法等排序方法。1冒泡排序就是把小的元素往前調(diào)或者把大的元素往后調(diào)。比較是相鄰的兩個(gè)元素比較,交換也發(fā)生在這兩個(gè)元素之間。冒泡排序是最慢的排序算法。在實(shí)際運(yùn)用中它是效率最低的算法。它通過(guò)一趟又一趟地比較數(shù)組中的每一個(gè)元素,使較大的
3、數(shù)據(jù)下沉,較小的數(shù)據(jù)上升。它是0(2)的算法。2插入排序是在一個(gè)已經(jīng)有序的小序列的基礎(chǔ)上,一次插入一個(gè)元素。比較是從有序序列的末尾開(kāi)始,也就是想要插入的元素和已經(jīng)有序的最大者開(kāi)始比起,如果比它大則直接插入在其后面,否則一直往前找直到找到它該插入的位置。如果碰見(jiàn)一個(gè)和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后順序沒(méi)有改變,從原無(wú)序序列出去的順序就是排好序后的順序,所以插入排序是穩(wěn)定的。3Bucket排序法即桶排序,它的有效性需假定輸入數(shù)據(jù)是由一個(gè)完全隨機(jī)過(guò)程產(chǎn)生,即要求桶排序的輸入數(shù)據(jù)呈均勻分布。桶排序思想如下:1)把區(qū)間0,1)分解為n個(gè)大小相等的桶;2
4、)將n個(gè)輸入數(shù)據(jù)按照其取值不同分配到n個(gè)桶里面;3)對(duì)每個(gè)桶里面的數(shù)據(jù)進(jìn)行排序;4)然后將桶里面的數(shù)據(jù)按順序收集。選擇排序是給每個(gè)位置選擇當(dāng)前元素最小的,比如給第一個(gè)位置選擇最小的,在剩余元素里面給第二個(gè)元素選擇第二小的,依次類(lèi)推,直到第n-1個(gè)元素,第n個(gè)元素不用選擇了,因?yàn)橹皇O滤粋€(gè)最大的元素了。希爾排序是按照不同步長(zhǎng)對(duì)元素進(jìn)行插入排序,當(dāng)剛開(kāi)始元素很無(wú)序的時(shí)候,步長(zhǎng)最大,所以插入排序的元素個(gè)數(shù)很少,速度很快;當(dāng)元素基本有序了,步長(zhǎng)很小,插入排序?qū)τ谟行虻男蛄行屎芨?。Shell排序通過(guò)將數(shù)據(jù)分成不同的組,先對(duì)每一組進(jìn)行排序,然后再對(duì)所有的元素進(jìn)行一次插入排序,以減少數(shù)據(jù)交換和移動(dòng)的次數(shù)
5、。6快速排序有兩個(gè)方向,左邊的i下標(biāo)一直往右走,當(dāng)aiacenter_index。如果i和j都走不動(dòng)了,ij。交換aj和acenter_index,完成一趟快速排序??焖倥判蚩梢杂上旅嫠牟浇M成。(1)如果不多于1個(gè)數(shù)據(jù),直接返回。(2)一般選擇序列最左邊的值作為支點(diǎn)數(shù)據(jù)。(3)將序列分成2部分,一部分都大于支點(diǎn)數(shù)據(jù),另外一部分都小于支點(diǎn)數(shù)據(jù)。(4)對(duì)兩邊利用遞歸排序數(shù)列。7Heap排序法即堆排序法,堆的結(jié)構(gòu)是節(jié)點(diǎn)i的孩子為2*i和2*i+1節(jié)點(diǎn),大頂堆要求父節(jié)點(diǎn)大于等于其2個(gè)子節(jié)點(diǎn),小頂堆要求父節(jié)點(diǎn)小于等于其2個(gè)子節(jié)點(diǎn)。在一個(gè)長(zhǎng)為n的序歹U,堆排序的過(guò)程是從第n/2開(kāi)始和其子節(jié)點(diǎn)共3個(gè)值選擇最
6、大或者最小,這3個(gè)元素之間的選擇當(dāng)然不會(huì)破壞穩(wěn)定性。但當(dāng)為n/2-1,n/2-2,.1這些個(gè)父節(jié)點(diǎn)選擇元素時(shí),就會(huì)破壞穩(wěn)定性。有可能第n/2個(gè)父節(jié)點(diǎn)交換把后面一個(gè)元素交換過(guò)去了,而第n/2-1個(gè)父節(jié)點(diǎn)把后面一個(gè)相同的元素沒(méi)有交換,那么這2個(gè)相同的元素之間的穩(wěn)定性就被破壞了。三、算法實(shí)現(xiàn)1.VB漢諾塔程序代碼:Dimnum(3)AsByteDimcentre(3)AsIntegerPrivateSubInitialize(numOfPlateAsInteger)num(1)=numOfPlatenum(2)=0num(3)=07個(gè)盤(pán)的可見(jiàn)性Fori=1To7plate(i).Visible=Tr
7、ueIf(inumOfPlate)Thenplate(i).Visible=FalseEndIfNexti7個(gè)盤(pán)的縱坐標(biāo)位置plate(1).Top=-240*numOfPlate+3600Fori=2To7plate(i).Top=plate(i-1).Top+240Next7個(gè)盤(pán)的橫坐標(biāo)位置Fori=1To7plate(i).Left=centre(1)-plate(i).Width/2NextiEndSubPrivateSubposition(objAsShape,placeAsInteger)obj.Top=-240*num(place)+3600obj.Left=centre(pla
8、ce)-obj.Width/2EndSubPrivateSubmovePlate(NAsInteger,FAsInteger,TAsInteger)num(F)=num(F)-1num(T)=num(T)+1Fori=1To1000Forj=1To1000Fork=1To20NextkNextjNextiCallposition(plate(N),T)EndSubPrivateSubHanoi(NAsInteger,AAsInteger,BAsInteger,CAsInteger)IfN=1ThenCallmovePlate(N,A,C)ElseCallHanoi(N-1,A,C,B)Call
9、movePlate(N,A,C)CallHanoi(N-1,B,A,C)EndIfEndSubPrivateSubCommand1_Click()CallHanoi(scl.Value,1,2,3)Print完成!EndSubPrivateSubForm_Load()Form1.Showcentre(1)=1627centre(2)=3667centre(3)=5707Initialize(7)EndSubPrivateSubLabel1_Click()EndSubPrivateSubscl_Change()lblNum.Caption=scl.ValueCallInitialize(scl.
10、Value)EndSub2.VB排序程序代碼:OptionExplicitDimmArray()Downloadby HYPERLINK PrivateSubcmbSorts_Click()IfcmbSorts.ListIndex4ThencmbOrder.Enabled=FalseElsecmbOrder.Enabled=TrueEndIfEndSubPrivateSubCommand1_Click()DimIDimJIfLen(Trim$(txtSize)=0ThentxtSize=0ReDimmArray(CDbl(txtSize)-1)RandomizelstUnsorted.Clea
11、rForI=0ToCDbl(txtSize)-1J=Int(32767-(-32768)+1)*Rnd+(-32768)lstUnsorted.AddItemStr$(J)mArray(I)=JNextCommand2.Enabled=TrueEndSubPrivateSubCommand2_Click()DimIMousePointer=11lstSorted.ClearI=TimerlblBegin=開(kāi)始時(shí)間:&IgIterations=0SelectCasecmbSorts.ListIndexCase0CallBubbleSort(mArray(),cmbOrder.ListIndex)
12、Case1CallInsertion(mArray(),cmbOrder.ListIndex)Case2CallBucket(mArray(),cmbOrder.ListIndex)Case3CallSelection(mArray(),cmbOrder.ListIndex)Case4CallShellSort(mArray(),cmbOrder.ListIndex)Case5CallQuickSort(mArray(),0,UBound(mArray)Case6CallHeap(mArray()EndSelectlblIterations=循環(huán)次數(shù):&Format$(gIterations,
13、#,#)lblEnd=結(jié)束時(shí)間:&TimerlblDuration=持續(xù)時(shí)間:&Timer-I&秒!ForI=0ToUBound(mArray)lstSorted.AddItemmArray(I)NextMousePointer=0EndSubPrivateSubForm_Load()cmbOrder.AddItem升序cmbOrder.AddItem降序cmbOrder.ListIndex=0cmbSorts.AddItem冒泡排序法cmbSorts.AddItem插入排序法cmbSorts.AddItemBucket排序法cmbSorts.AddItem選擇排序法cmbSorts.AddItemShell排序法cmbSorts.AddItem快速排序法cmbSorts.AddItemHeap排序法cmbSorts.ListIndex=0lstUnsorted.AddItem-1322lstUnsorted.AddItem2171lstUnsorted.AddItem-511ReDimmArray(0To2)mArray(0)=-1322mArray(1)=2171mArray(2)=-511EndSub四、運(yùn)行結(jié)果1.VB漢諾塔運(yùn)行結(jié)果2.VB排序的運(yùn)行結(jié)果五、結(jié)束語(yǔ)VB排序和漢諾
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 單位交通安全課件
- 廣東新高考一模數(shù)學(xué)試卷
- 河北省職業(yè)中專(zhuān)數(shù)學(xué)試卷
- 健康管理高血壓課件教案
- 健康管理兼職講課課件
- 2025年中國(guó)桐木樹(shù)行業(yè)投資研究分析及發(fā)展前景預(yù)測(cè)報(bào)告
- 2025年中國(guó)文教體育用品行業(yè)市場(chǎng)競(jìng)爭(zhēng)格局分析及投資方向研究報(bào)告
- 2024年中國(guó)天然氣分布式能源行業(yè)市場(chǎng)調(diào)查報(bào)告
- 2025屆甘肅省武威市武威十八中物理高一第二學(xué)期期末預(yù)測(cè)試題含解析
- 健康活動(dòng)色彩的秘密課件
- 2025年下半年山東能源棗莊礦業(yè)集團(tuán)公司定向培養(yǎng)井下高技能員工招生200人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 中職服裝面試題及答案
- 2025-2030中國(guó)近地軌道衛(wèi)星行業(yè)市場(chǎng)發(fā)展趨勢(shì)與前景展望戰(zhàn)略研究報(bào)告
- 板式家具生產(chǎn)工藝流程
- 《神經(jīng)母細(xì)胞瘤》課件
- 植保知識(shí)無(wú)人機(jī)課件圖片
- 材料欠款擔(dān)保協(xié)議書(shū)
- DBJ-T 15-94-2013靜壓預(yù)制混凝土樁基礎(chǔ)技術(shù)規(guī)程(廣東省標(biāo)準(zhǔn))
- 作文好詞好句講解課件
- T-CCASC 0038-2024 廢鹽為原料離子膜法燒堿應(yīng)用核查技術(shù)規(guī)范
- 工程建設(shè)項(xiàng)目EPC總承包管理規(guī)范
評(píng)論
0/150
提交評(píng)論