【正文】
gap) = x j = j gap Else j = 0 End If Wend Next i gap = Int(gap / 2)’減小增量‘輸出結(jié)果 = + Str(gap) + : For k = 1 To n = + Str(a(k)) + . Next k = + vbCr + vbLfWendEnd Sub其他源程序希爾排序按鈕對(duì)應(yīng)的源程序如下:Private Sub CmdShell_Click() 39。希爾排序 Dim i As Integer = = For i = 1 To 10 39。輸入原始數(shù)據(jù) a(i) = Int(Rnd * 100) = + Str(a(i)) + . Next i 39。調(diào)用子程序排序并輸出中間結(jié)果 Call shellsort(10)End Sub小結(jié)在進(jìn)行希爾排序時(shí),需注意增量序列的取值方法,并且使這些序列中的值沒有除1之外的公因子,且最后一個(gè)增量值必須為1。能解決問題的辦法都是好辦法,問題不一定整體解決才好。這就是分治的思想。亂打誤撞——模擬法破解難題問:“電腦解決確定問題可做到手到擒來,對(duì)于電腦中實(shí)現(xiàn)一個(gè)不確定的問題,例如彩票或抽獎(jiǎng),怎樣做呢?”答:“算法的美妙在于其準(zhǔn)確和確定,而另有一種價(jià)值則在于其不確定,象我們的抽獎(jiǎng)程序和彩票程序。確定的問題電腦可以處理,不確定的問題電腦也能處理,隨機(jī)函數(shù)就是實(shí)現(xiàn)電腦中不確定事件的重要砝碼。下面我們通過示例來看一下?!彪S機(jī)函數(shù)的出現(xiàn)通過語言編程一般來說對(duì)事物的認(rèn)識(shí)是很確定的了,是一就是一,是二就是二,還有一個(gè)問題,有一些不那么確定的事情該如何處理,象我們的彩票抽獎(jiǎng),如果是確定的了,那也就不用抽了,恐怕也就沒人玩了。對(duì)于這一類的事情,該怎么辦呢?語言中為我們提供了隨機(jī)函數(shù),也就是說通過它得到的一個(gè)值將是不能確定的。隨機(jī)函數(shù)產(chǎn)生的秘密計(jì)算機(jī)常常需要模擬隨機(jī)選擇的數(shù)目,有多種不同的方法可以產(chǎn)生具有隨機(jī)性質(zhì)的數(shù),由于通過此種系統(tǒng)的方法產(chǎn)生的不是真正的隨機(jī)數(shù),所以一般稱做偽隨機(jī)數(shù)。最常用的產(chǎn)生偽隨機(jī)數(shù)的方法稱為線性同余法。公式如下,選擇四個(gè)數(shù):模數(shù)m,乘數(shù)a,增量c和種數(shù)x0,使 2≤am, 0≤cm, 0≤x0m,可以生成一個(gè)偽隨機(jī)序列{xn},使得對(duì)于所有的n,0≤x0m。生成的辦法是逐次同余:xn+1=(axn+c)mod m應(yīng)用和變通隨機(jī)函數(shù)有一個(gè)范圍,即Rnd 函數(shù)返回小于 1 但大于或等于 0 的小數(shù)值。但通常我們要解的問題不在這個(gè)范圍內(nèi),如何解決呢?示例:最簡單的抽獎(jiǎng)程序,做一個(gè)猜1100之間數(shù)的游戲。因?yàn)殡S機(jī)函數(shù)的范圍是一個(gè)01之間的小數(shù),和題目要求的范圍相差很大。所以,當(dāng)我們用到的值不在這個(gè)范圍之內(nèi)時(shí),我們可以想點(diǎn)變通的辦法。要想做到從1100之間進(jìn)行取數(shù),必須擴(kuò)大100倍才行。不難計(jì)算RND*100的范圍卻不是1100,而是0100,不包括0和100,怎樣就是1100了呢?加上一就有了,范圍成了1101,不包括1和101,只要對(duì)得到的數(shù)只取整數(shù),這個(gè)數(shù)只要這樣表達(dá)就出來了,正好INT()函數(shù)起到這樣的作用:INT(RND*100+1)所以程序也非常簡單:Private Sub Form_Click()’單擊窗體Print INT(RND*100+1)End Sub其中中間的代碼就完成了我們題目的要求。所以針對(duì)上述不確定的問題時(shí),要利用好隨機(jī)函數(shù),并適當(dāng)?shù)貙?duì)其做某些變通,這樣問題就得到解決了。小結(jié)隨機(jī)函數(shù)是程序設(shè)計(jì)中一道亮麗的風(fēng)景。這個(gè)函數(shù)是非常有用的,她可能是計(jì)算機(jī)語言中唯一沒有理性的東東了。就好象我們?nèi)祟愃哂械默F(xiàn)省心的想法,妙手偶得之的佳句。正因?yàn)檫@個(gè)唯一性,也就不難看出她在計(jì)算機(jī)語言中的地位了。