vb应用--快速排序-法实现二维数组的指定列排序
来源:互联网 发布:php zend 解密 编辑:程序博客网 时间:2024/06/09 23:02
'演示部分
'在窗口加一个command按钮
'启动后把窗体最大化,方便观看.
'****************************************
Private Sub Command1_Click()Sub Command1_Click()
'这里不妨用10000个元素,
'事实上在窗体打出的第一个数字时,排序就已经完成了!!.
'可以不用再考虑排序的效率了
Dim myAy(10000, 10) As Long
Dim i As Long
Dim j As Long
'进行随机的给数组赋值
For i = 0 To UBound(myAy, 1)
For j = 0 To UBound(myAy, 2)
myAy(i, j) = Fix(10000 * Rnd)
Next
Next
'输入到窗口
Dim cl As Long
cl = Val(InputBox("请输入要排序的列 1~10"))
Cls
dSort myAy, cl
Print
Print Tab(cl * 10); "第" & cl; "列排序"
Print
For i = 0 To UBound(myAy, 1)
For j = 0 To UBound(myAy, 2)
Print Tab(j * 10); myAy(i, j);
Next
Print
Next
End Sub
'************************************************
'升序快速排序法
Sub QkSort()Sub QkSort(Ay() As Long, Io As Long, Jo As Long, index() As Long)
'''''''''''''''''''''''''''''''
'Ay()只能传入一维数组
'index()传入一维数组,注意:数组上标一定要和AY()一样
Dim i As Long, j As Long, X As Long, tp As Long
Dim bQ As Boolean 'i到j跳跃开关
'初始化
i = Io
j = Jo
X = Ay(i)
'一轮排序
Do While i < j
If Not bQ Then
If Ay(j) < X Then
tp = Ay(j): Ay(j) = Ay(i): Ay(i) = tp
tp = index(j): index(j) = index(i): index(i) = tp
bQ = True
Else
j = j - 1
End If
Else
If Ay(i) > X Then
tp = Ay(j): Ay(j) = Ay(i): Ay(i) = tp
tp = index(j): index(j) = index(i): index(i) = tp
bQ = False
Else
i = i + 1
End If
End If
Loop
'递归
If i < Jo Then QkSort Ay, j + 1, Jo, index '注意靠后的要加1
If Io < j Then QkSort Ay, Io, i, index
End Sub
'二维数组排序子程序
Sub dSort()Sub dSort(a() As Long, ByVal keyCol As Integer)
''''''''''''''''''''''''''''''''''
'dSort子程序
'a()数组,只能传入二维数组
'keycol参数是要排序的列
''''''''''''''''''''''''''''''''''''
Dim Row As Long
Dim Col As Long
Dim idx() As Long '存放需要排序的列
Dim index() As Long '存放一个索引.方便操作其他非排序列
Dim i As Long
Dim j As Long
Dim temp As Long
Dim b() As Long '一个过渡的二维数组.
'初始化
Row = UBound(a, 1)
Col = UBound(a, 2)
ReDim b(Row, Col)
ReDim idx(Row)
ReDim index(Row)
'初始化排序的列的数组,及索引数组
For i = 0 To Row
idx(i) = a(i, keyCol)
index(i) = i
Next
'根据排列的数组对索引列排序
'使用快速排序法
QkSort idx, 0, Row, index
'整个二维数组,根据索引进行排序.
For j = 0 To Col
For i = 0 To Row
b(i, j) = a(index(i), j)
Next
Next
For i = 0 To Row
For j = 0 To Col
a(i, j) = b(i, j)
Next
Next
End Sub
'在窗口加一个command按钮
'启动后把窗体最大化,方便观看.
'****************************************
Private Sub Command1_Click()Sub Command1_Click()
'这里不妨用10000个元素,
'事实上在窗体打出的第一个数字时,排序就已经完成了!!.
'可以不用再考虑排序的效率了
Dim myAy(10000, 10) As Long
Dim i As Long
Dim j As Long
'进行随机的给数组赋值
For i = 0 To UBound(myAy, 1)
For j = 0 To UBound(myAy, 2)
myAy(i, j) = Fix(10000 * Rnd)
Next
Next
'输入到窗口
Dim cl As Long
cl = Val(InputBox("请输入要排序的列 1~10"))
Cls
dSort myAy, cl
Print Tab(cl * 10); "第" & cl; "列排序"
For i = 0 To UBound(myAy, 1)
For j = 0 To UBound(myAy, 2)
Print Tab(j * 10); myAy(i, j);
Next
Next
End Sub
'************************************************
'升序快速排序法
Sub QkSort()Sub QkSort(Ay() As Long, Io As Long, Jo As Long, index() As Long)
'''''''''''''''''''''''''''''''
'Ay()只能传入一维数组
'index()传入一维数组,注意:数组上标一定要和AY()一样
Dim i As Long, j As Long, X As Long, tp As Long
Dim bQ As Boolean 'i到j跳跃开关
'初始化
i = Io
j = Jo
X = Ay(i)
'一轮排序
Do While i < j
If Not bQ Then
If Ay(j) < X Then
tp = Ay(j): Ay(j) = Ay(i): Ay(i) = tp
tp = index(j): index(j) = index(i): index(i) = tp
bQ = True
Else
j = j - 1
End If
Else
If Ay(i) > X Then
tp = Ay(j): Ay(j) = Ay(i): Ay(i) = tp
tp = index(j): index(j) = index(i): index(i) = tp
bQ = False
Else
i = i + 1
End If
End If
Loop
'递归
If i < Jo Then QkSort Ay, j + 1, Jo, index '注意靠后的要加1
If Io < j Then QkSort Ay, Io, i, index
End Sub
'二维数组排序子程序
Sub dSort()Sub dSort(a() As Long, ByVal keyCol As Integer)
''''''''''''''''''''''''''''''''''
'dSort子程序
'a()数组,只能传入二维数组
'keycol参数是要排序的列
''''''''''''''''''''''''''''''''''''
Dim Row As Long
Dim Col As Long
Dim idx() As Long '存放需要排序的列
Dim index() As Long '存放一个索引.方便操作其他非排序列
Dim i As Long
Dim j As Long
Dim temp As Long
Dim b() As Long '一个过渡的二维数组.
'初始化
Row = UBound(a, 1)
Col = UBound(a, 2)
ReDim b(Row, Col)
ReDim idx(Row)
ReDim index(Row)
'初始化排序的列的数组,及索引数组
For i = 0 To Row
idx(i) = a(i, keyCol)
index(i) = i
Next
'根据排列的数组对索引列排序
'使用快速排序法
QkSort idx, 0, Row, index
'整个二维数组,根据索引进行排序.
For j = 0 To Col
For i = 0 To Row
b(i, j) = a(index(i), j)
Next
Next
For i = 0 To Row
For j = 0 To Col
a(i, j) = b(i, j)
Next
Next
End Sub
- vb应用--快速排序-法实现二维数组的指定列排序
- 二维数组排序--指定数组列排序
- php二维数组按指定列排序
- 二维数组的列排序
- 二维数组的列排序
- 二维数组的列排序
- 二维数组的列排序
- 二维数组的列排序
- 二维数组的列排序
- 二维数组列排序
- 针对二维数组,实现多列排序
- 二维数组快速排序
- 二维数组快速排序
- 对二维数组的行、列排序
- 二维数组按指定的键值排序
- 实现二维数组排序
- 不使用PHP内置排序函数对二维数组实现快速排序的面试题
- 快速排序(二维数组)
- 人生有沼泽(转载)
- 关于指针实体问题的看法
- 随手笔记
- 话说---记忆
- 如何正确的进行人生规划
- vb应用--快速排序-法实现二维数组的指定列排序
- ERP选型前的准备工作
- JDBC的驱动类型
- 数据结构(C#)_排序算法(冒泡排序)
- 全球最急需的10项IT技术
- ORACLE数据库备份与恢复详解
- 从懵懂到行动——剖析“职业生涯规划”的方法与步骤
- 遍历页面控件
- MySql初体验