排序與漢諾塔算法的設(shè)計與實現(xiàn)_第1頁
排序與漢諾塔算法的設(shè)計與實現(xiàn)_第2頁
排序與漢諾塔算法的設(shè)計與實現(xiàn)_第3頁
排序與漢諾塔算法的設(shè)計與實現(xiàn)_第4頁
排序與漢諾塔算法的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、排序與漢諾塔算法的設(shè)計與實現(xiàn)一、問題的提出我們生活中處處都需要排序,例如最普通的排隊問題、排列小游戲等。漢諾塔(又稱河內(nèi)塔)問題是源于印度一個古老傳說的益智游戲。上帝創(chuàng)造世界的時候做了三根金剛石柱子,在一根柱子上從下往上安大小順序摞著64片黃金圓盤。上帝命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。并且規(guī)定:在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤,最后把這些圓盤放在第三根柱子上,并且從下往上是圓盤大小依次減小的。當(dāng)所有的圓盤都從第一根柱子移到第三根柱子上時,世界就將在一聲霹靂中消滅,而梵塔、廟宇和眾生也都將同歸于盡。二、算法設(shè)計1、漢諾塔排序的實現(xiàn)利用了一個中

2、間幫助柱子B,將A柱子上的五個盤按照游戲規(guī)則移動到C柱子上。其中利用了函數(shù)的遞歸調(diào)用,圖片的移動事件,鼠標(biāo)事件,以及圖片的載入、控件數(shù)組等相關(guān)知識。(1)用戶可以隨時點擊“重新開始”按鈕重新開始這個游戲;(2)用戶可以隨時點擊“退出”按鈕退出這個游戲。2、VB排序主要運用了冒泡排序法、插入排序法、Bucket排序法、選擇排序法、Shell排序法、快速排序法、Heap排序法等排序方法。1冒泡排序就是把小的元素往前調(diào)或者把大的元素往后調(diào)。比較是相鄰的兩個元素比較,交換也發(fā)生在這兩個元素之間。冒泡排序是最慢的排序算法。在實際運用中它是效率最低的算法。它通過一趟又一趟地比較數(shù)組中的每一個元素,使較大的

3、數(shù)據(jù)下沉,較小的數(shù)據(jù)上升。它是0(2)的算法。2插入排序是在一個已經(jīng)有序的小序列的基礎(chǔ)上,一次插入一個元素。比較是從有序序列的末尾開始,也就是想要插入的元素和已經(jīng)有序的最大者開始比起,如果比它大則直接插入在其后面,否則一直往前找直到找到它該插入的位置。如果碰見一個和插入元素相等的,那么插入元素把想插入的元素放在相等元素的后面。所以,相等元素的前后順序沒有改變,從原無序序列出去的順序就是排好序后的順序,所以插入排序是穩(wěn)定的。3Bucket排序法即桶排序,它的有效性需假定輸入數(shù)據(jù)是由一個完全隨機過程產(chǎn)生,即要求桶排序的輸入數(shù)據(jù)呈均勻分布。桶排序思想如下:1)把區(qū)間0,1)分解為n個大小相等的桶;2

4、)將n個輸入數(shù)據(jù)按照其取值不同分配到n個桶里面;3)對每個桶里面的數(shù)據(jù)進行排序;4)然后將桶里面的數(shù)據(jù)按順序收集。選擇排序是給每個位置選擇當(dāng)前元素最小的,比如給第一個位置選擇最小的,在剩余元素里面給第二個元素選擇第二小的,依次類推,直到第n-1個元素,第n個元素不用選擇了,因為只剩下它一個最大的元素了。希爾排序是按照不同步長對元素進行插入排序,當(dāng)剛開始元素很無序的時候,步長最大,所以插入排序的元素個數(shù)很少,速度很快;當(dāng)元素基本有序了,步長很小,插入排序?qū)τ谟行虻男蛄行屎芨?。Shell排序通過將數(shù)據(jù)分成不同的組,先對每一組進行排序,然后再對所有的元素進行一次插入排序,以減少數(shù)據(jù)交換和移動的次數(shù)

5、。6快速排序有兩個方向,左邊的i下標(biāo)一直往右走,當(dāng)aiacenter_index。如果i和j都走不動了,ij。交換aj和acenter_index,完成一趟快速排序。快速排序可以由下面四步組成。(1)如果不多于1個數(shù)據(jù),直接返回。(2)一般選擇序列最左邊的值作為支點數(shù)據(jù)。(3)將序列分成2部分,一部分都大于支點數(shù)據(jù),另外一部分都小于支點數(shù)據(jù)。(4)對兩邊利用遞歸排序數(shù)列。7Heap排序法即堆排序法,堆的結(jié)構(gòu)是節(jié)點i的孩子為2*i和2*i+1節(jié)點,大頂堆要求父節(jié)點大于等于其2個子節(jié)點,小頂堆要求父節(jié)點小于等于其2個子節(jié)點。在一個長為n的序歹U,堆排序的過程是從第n/2開始和其子節(jié)點共3個值選擇最

6、大或者最小,這3個元素之間的選擇當(dāng)然不會破壞穩(wěn)定性。但當(dāng)為n/2-1,n/2-2,.1這些個父節(jié)點選擇元素時,就會破壞穩(wěn)定性。有可能第n/2個父節(jié)點交換把后面一個元素交換過去了,而第n/2-1個父節(jié)點把后面一個相同的元素沒有交換,那么這2個相同的元素之間的穩(wěn)定性就被破壞了。三、算法實現(xiàn)1.VB漢諾塔程序代碼:Dimnum(3)AsByteDimcentre(3)AsIntegerPrivateSubInitialize(numOfPlateAsInteger)num(1)=numOfPlatenum(2)=0num(3)=07個盤的可見性Fori=1To7plate(i).Visible=Tr

7、ueIf(inumOfPlate)Thenplate(i).Visible=FalseEndIfNexti7個盤的縱坐標(biāo)位置plate(1).Top=-240*numOfPlate+3600Fori=2To7plate(i).Top=plate(i-1).Top+240Next7個盤的橫坐標(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=開始時間:&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é)束時間:&TimerlblDuration=持續(xù)時間:&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四、運行結(jié)果1.VB漢諾塔運行結(jié)果2.VB排序的運行結(jié)果五、結(jié)束語VB排序和漢諾

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論