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试试。