Delphi可以寫一個比較準的樂透程式碼嗎? Part-II |
答題得分者是:william
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
如何將此程式碼改為Delphi程式碼 哪種排序較快?VB可以多快?
以內部排序來比較,我只知道QuickSort演算法是最快的.(最壞O(n2) ,平均O(n log2n)),我不是資工的,沒歸納整理過每種排序的演算法效率,這裡實做出來的VB QuickSort, 在排序30,000筆整數時,使用我的AMD CPU(我忘了是哪一款型號,只記得是300MHZ) 的慢速電腦,大約1秒鐘,我想這應該符合大多數的需求了吧?如果還需要處理更多數量的排序方法,我建議丟給ADO,搞不好比自己寫的還要快...
我只用VB 6.0測試過, 沒試過改寫到VBScript的執行速度時會多快?要是有網友試驗過,麻煩給我一點情報,可以節省我一點時間.
利用ListBox/ComboBox的Sorted Property
上面的QuickSort,快是很快,可是還要用個array存放,有些情況就是挺麻煩的.況且,大部份的情況還需要新增/刪除某個Index, 從VB問世以來, 其實我很少自己排序.多半是利用ListBox或是ComboBox,設定了Property Sorted=True後,自然可以得到排序後的結果.真要排到...例如:10,000筆以上的話,通常早已先存放到外部的資料庫檔案,只要利用Index, 或者SQL Order by指令,也可以得到同樣效果.
原始程式(Quick Sort)
以下示範的QuickSort函數, 排序30,000個整數, 用AMD K6 300的CPU, 大約要一秒鐘.
Option Explicit
Private Sub Form_Load()
Me.AutoRedraw = True
End Sub
Private Sub Command1_Click()
Dim i%
Dim vStart, vEnd
Dim va(30000)
Randomize
For i = LBound(va, 1) To UBound(va, 1)
va(i) = Int((30000 * Rnd) 1)
Next i
vStart = Now
QuickSort va()
vEnd = Now
Me.Cls
Me.Print "Elapsed Time:"
Me.Print DateDiff("s", vStart, vEnd) & " second(s)"
End Sub
Private Sub QuickSort(va())
QSortRecursive LBound(va, 1), UBound(va, 1), va()
End Sub Private Sub QSortRecursive(ByVal iFirst%, ByVal iLast%, va())
Dim i%, j%
Dim v
If iFirst < iLast Then
i = iFirst 1
Do While va(i) < va(iFirst)
i = i 1
If i > iLast Then Exit Do
Loop
j = iLast
Do While va(j) > va(iFirst)
j = j - 1
If j < iFirst Then Exit Do
Loop
Do While (i < j)
v = va(i)
va(i) = va(j)
va(j) = v
Do
i = i 1
Loop While (va(i) < va(iFirst))
Do
j = j - 1
Loop While (va(j) > va(iFirst))
Loop
v = va(iFirst)
va(iFirst) = va(j)
va(j) = v
QSortRecursive iFirst, j - 1, va()
QSortRecursive j 1, iLast, va()
End If
End Sub
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
|
flyup
資深會員 發表:280 回覆:508 積分:385 註冊:2002-04-15 發送簡訊給我 |
|
william
版主 發表:66 回覆:2535 積分:3048 註冊:2002-07-11 發送簡訊給我 |
引言:可否有完整的程式說明,幫幫忙!AList.Sort(MySort); This is the main point. TList will perform a quick sort using the function MySort. MySort should be of type TListSortCompare and, TListSortCompare = function (Item1, Item2: Pointer): Integer; By implementing a proper function (Item1,Item2 are items inside TList), you can virtually perform a quick sort on anything. BTW, why does the "then" keyword disappear? I can see it is inside the quoted message? |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |