A. 索引排序vb演算法原理
快速從一個大數據集中找出某個欄位等於確定值的記錄。
vb內部排序7大演算法:1、冒泡排序2、直接選擇排序(StraightSelectSort)(BubbleSort)3、直接插入排序(StraightInsertionSort)4、希爾排序(ShellSort)5、快速排序(QuickSort)6、歸並排序(MergeSort)7、堆排序(HeapSort)。
索引是一種利用某種規則的數據結構與實際數據的關系加快數據查找的功能;索引數據節點中有著實際文件的位置,因為索引是根據特定的規則和演算法構建的,在查找的時候遵循索引的規則可以快速查找到對應數據的節點,從而達到快速查找數據的效果;其實宏觀來說索引其實是一種概念而不是具體的某項技術,只是我們在某個技術中運用得比較廣泛和鮮明(比如說資料庫)漸漸的有了特定領域的標簽,其實在生活中索引的使用無處不在,比如說:書本里的目錄;讀書時的座位號,考試編號都有類似索引的功能。
B. 求vb 快速排序演算法、插入排序源代碼!!!!追加分!!!
Option Explicit
Private Sub Form_Load()
Dim i As Integer, intC As Integer
Dim IntOuSus() As String, strOuSus As String
Dim IntJiSus() As String, strJiSus As String
Randomize
For i = 1 To 30
intC = CInt(Rnd * 90) + 10
If intC Mod 2 = 1 Then
strJiSus = strJiSus & IIf(strJiSus = "", "", ",") & intC
Else
strOuSus = strOuSus & IIf(strOuSus = "", "", ",") & intC
End If
Next
IntOuSus = Split(strOuSus, ",")
IntJiSus = Split(strJiSus, ",")
OrderNumbers IntJiSus, "ASC"
OrderNumbers IntOuSus, "DESC"
End Sub
'注意以下過程中第一個參數使用了ByRef
'此方法比傳統的冒泡法快得多
Private Sub OrderNumbers(ByRef a() As String, Optional ByVal ASCDESC As String = "ASC")
Dim min As Long, max As Long, num As Long, first As Long, last As Long, temp As Long, all As New Collection, steps As Long
ASCDESC = UCase(ASCDESC)
min = LBound(a)
max = UBound(a)
all.Add a(min)
steps = 1
For num = min + 1 To max
last = all.Count
If a(num) < CDbl(all(1)) Then all.Add a(num), BEFORE:=1: GoTo nextnum '加到第一項
If a(num) > CDbl(all(last)) Then all.Add a(num), AFTER:=last: GoTo nextnum '加到最後一項
first = 1
Do While last > first + 1 '利用DO循環減少循環次數
temp = (last + first) \ 2
If a(num) > CDbl(all(temp)) Then
first = temp
Else
last = temp
steps = steps + 1
End If
Loop
all.Add a(num), BEFORE:=last '加到指定的索引
nextnum:
steps = steps + 1
Next
For num = min To max
If ASCDESC = "ASC" Then a(num) = CDbl(all(num - min + 1)): steps = steps + 1 '升序
If ASCDESC = "DESC" Then a(num) = CDbl(all(max - num + 1)): steps = steps + 1 '降序
Next
'MsgBox "本數組共經過 " & steps & "步實現" & IIf(ASCDESC = "ASC", "升序", "降序") & "排序!", 64, "INFORMATION"
Set all = Nothing
End Sub
C. VB初學:有個數組需要排序,從網上下載了一個快速排序法看不懂,麻煩高人逐條給做下標注。萬分感謝!
'自定義過程,帶三個參數(long型數組,兩個整數)
Sub Quicksort(List() As Long, min As Integer, max As Integer)
'定義變數
Dim med_value As Long
Dim hi As Integer
Dim lo As Integer
Dim i As Integer
'判斷參數2>=參數3退出過程
If min >= max Then Exit Sub
'取兩參關系的隨機整數
i = Int((max - min + 1) * Rnd + min)
'快速排序演算法
med_value = List(i)
List(i) = List(min)
lo = min: hi = max
Do
Do While List(hi) >= med_value
hi = hi - 1
If hi <= lo Then Exit Do
Loop
If hi <= lo Then
List(lo) = med_value
Exit Do
End If
List(lo) = List(hi)
lo = lo + 1
Do While List(lo) < med_value
lo = lo + 1
If lo >= hi Then Exit Do
Loop
If lo >= hi Then
lo = hi
List(hi) = med_value
Exit Do
End If
List(hi) = List(lo)
Loop
'遞歸調用
Quicksort List(), min, lo - 1
Quicksort List(), lo + 1, max
End Sub
D. 快速排序vb解法!
Private Sub Form_Click()
Dim a(6), i, j, t As Integer
a(1) = 46
a(2) = 79
a(3) = 56
a(4) = 38
a(5) = 40
a(6) = 80
For i = 1 To 6
For j = i + 1 To 6
If a(i) > a(j) Then
t = a(i)
a(i) = a(j)
a(j) = t
End If
Next j
Next i
For i = 1 To 6
Print a(i)
Next i
End Sub
E. vb快速排序演算法 不明白原理 求教 懸賞100
dim
i
as
long,j
as
long,aa()as
string,t
as
string
'假設數據存放在一個未知長度的數組aa裡面
for
i=0
to
ubound(aa)
for
j=0
to
ubound(aa)-i
if
aa(j)>aa(j+1)
then
t=aa(j)
aa(j)=aa(j+1)
aa(j+1)=t
next
j
next
i
'當i循環第一次運行的時候(i=0),j循環從數組aa的第一元素循環到最後一個元素,並將最大值存放在了aa的最後一個元素裡面。
'當i循環第二次運行的時候(i=1),只要比較aa數組從第一個元素到倒數第二個元素就可以了,因為倒數第一個元素已經是最大值的元素了。
'當i循環第三次運行的時候(i=2),只要比較aa數組從第一個元素到倒數第三個元素就可以了,因為倒數第一個元素和倒數第二個元素已經是最大值的元素了。
'依此類推,直到i循環aa元素個數次之後,j循環就從aa元素的倒數第一個元素排列到了正數第一個元素
這就是著名的冒泡排序法的遞增演算法(從小到大排序)。
反之遞減演算法就是把aa(j)>aa(j+1)換成aa(j)<aa(j+1)
F. 在vb中用快速排序法的例子
這個還是基礎的,關鍵你要按什麼方式排序號,不過用資料庫的存儲過程來排應該會更快一些!在vb裡面的排序就幾個方法,一般才學basic的時候就有例子的,典型的冒泡法
Public Sub Orbub(P() As Double, Optional SortMethod As Integer = 1)
Dim M As Long, n As Long, i As Long, j As Long
Dim K As Double, kk As Double, f As Double, D As Double
Dim Temp() As Double
M = 1
n = UBound(P)
ReDim Temp(1 To n) As Double
K = M: kk = n: f = 1
Do While (f <> 0)
j = kk - 1
kk = 0
For i = K To j
If (P(i) > P(i + 1)) Then
D = P(i): P(i) = P(i + 1): P(i + 1) = D: kk = i
End If
Next i
If (kk = 0) Then
f = 0
End If
j = K + 1: K = 0
For i = kk To j Step -1
If (P(i - 1) > P(i)) Then
D = P(i): P(i) = P(i - 1): P(i - 1) = D: K = i
End If
Next i
If (K = 0) Then
f = 0
End If
Loop
'根據排序方式的選擇來進行結果整理
If SortMethod <> 1 Then '從低到高改成從高到低
For i = 1 To n
Temp(i) = P(i)
Next
For i = 1 To n
P(i) = Temp(n + 1 - i)
Next
End If
End Sub
其實這個例子各教材大都有,我10幾年前還沒玩過電腦就把冒泡法在紙上學了呵呵
G. vb 快速排序
最內層的兩個DO循環中,你用的是While,這時有個問題,就是當while成立時,該DO循環還會再執行一次循環體,你可以改成Until試試。