二维数组,无限列排序算法 (改编)
vb.net吧
全部回复
仅看楼主
level 3
G自在W 楼主
Sub QuickSort(MyArray(,) As String, Contrast As Long, StartInt As Long, EndInt As Long, LenInt As Long, Optional Order As Boolean = True)
Dim i As Integer, j As Integer, M As Single
Dim TempShzu(100) As String
i = StartInt
j = EndInt
'找出数组的中点
M = MyArray((StartInt + EndInt) / 2, Contrast)
If Order = True Then '按照顺序排列
While (i <= j)
'找出比中点大的数
While (MyArray(i, Contrast) < M And i < EndInt)
i = i + 1
End While
'找出比中点小的数
While (M < MyArray(j, Contrast) And j > StartInt)
j = j - 1
End While
'互换这两个数
If (i <= j) Then
For p = 0 To LenInt
TempShzu(p) = MyArray(i, p)
MyArray(i, p) = MyArray(j, p)
MyArray(j, p) = TempShzu(p)
Next p
i = i + 1
j = j - 1
End If
End While
'未完成时递归调用
If (StartInt < j) Then Call QuickSort(MyArray, Contrast, StartInt, j, LenInt, True)
If (i < EndInt) Then Call QuickSort(MyArray, Contrast, i, EndInt, LenInt, True)
Else '按照倒叙排列
While (i <= j)
'找出比中点大的数
While (MyArray(i, Contrast) > M And i < EndInt)
i = i + 1
End While
'找出比中点小的数
While (M > MyArray(j, Contrast) And j > StartInt)
j = j - 1
End While
'互换这两个数
If (i <= j) Then
For p = 0 To LenInt
TempShzu(p) = MyArray(i, p)
MyArray(i, p) = MyArray(j, p)
MyArray(j, p) = TempShzu(p)
Next p
i = i + 1
j = j - 1
End If
End While
'未完成时递归调用
If (StartInt < j) Then Call QuickSort(MyArray, Contrast, StartInt, j, LenInt, False)
If (i < EndInt) Then Call QuickSort(MyArray, Contrast, i, EndInt, LenInt, False)
End If
End Sub
--调用的时候
QuickSort (你的数组,第几列用来对比,数组起始数字,数组结束数字,数组横向长度,是否正向排序)
例如 dim shuzu(100,15) as string
...数组内容省略...
其中第12列是用来对比的 shuzu(变量,12)
函数:
QuickSort (shuzu,12,0,100,15,true)
本算法搜索自百度,因不好用,自己稍微改了一下.
2015年10月20日 14点10分 1
level 13
你搜来的是vb6代码。在 .net版本不再需要这种函数,对性能要求没有达到极致的话直接用语言集成查询就够了。
2015年10月20日 15点10分 2
语言集成查询是怎么回事? .net 特有的?
2015年10月20日 15点10分
回复 G自在W : 早就有这功能了。大约5年前就有了。 ---贴吧极速版 For UWP
2015年10月20日 15点10分
另外我看到了你推荐的代码重构,我下下来看了,还不错,准备买个实体的,屏幕上看久了眼睛疼.
2015年10月20日 16点10分
level 3
G自在W 楼主
我以前一直使用的vb. 这周才开始学 vb.net. 并做asp.net网站,有个要求是 把报表按照某一列排序,我百度了好久没找到vb的二维数组排序算法.唯一找到的不满足要求.就自己改了下.
我用的vb里面有个对一维数组排序的三分值算法(应该是这么叫的)非常快.千万数组,也就几毫秒的事情.可惜不适用二维.也不知道怎么移植过来,你有什么好的方法实现高性能的二维排序吗,请不惜赐教.
2015年10月20日 15点10分 3
你想对二维数组的每一行进行排序?
2015年10月21日 04点10分
那么你可以这样定义二维数组 原本是Dim n%(50,6),改成Dim n%(50)()然后用Redim初始化每一行的空间。这样就可以用一维的排序了。
2015年10月21日 04点10分
@Nukepayload2 这样排序后,数组后面的列会不会乱.类似于Excel的扩展排序,后面的列会紧跟着需要排序的列,而不是仅仅把需要排序的列进行排序
2015年11月01日 15点11分
level 9
.net数组的方法里找到数组最大值 max方法,也有根据最大值找数组号的方法。
2015年10月21日 12点10分 4
1