|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
第3阶段排序,确定需要检查的前nn列是哪几列。
brr(0, 2) = 2 'brr数组中0行作为排列列序号位置 相当于你的arrPrmtIndSort()的作用
'下面排序工作不解释了。我用的是比较落后的插值排序,没有用冒泡交换排序。
'反正对整体速度影响不大。
For i = 3 To n
r = brr(-1, i)
l = brr(1, i)
For j = 2 To i - 1
If r < brr(-1, j) Then
For k = i To j + 1 Step -1
brr(-1, k) = brr(-1, k - 1)
brr(0, k) = brr(0, k - 1)
brr(1, k) = brr(1, k - 1)
Next
Exit For
End If
Next
brr(-1, j) = r
brr(0, j) = i
brr(1, j) = l
Next
ss = ss & vbCr & "Sort: " & Format(Timer - tms, "0.000s"): tms = Timer
'最后,
在brr数组的第-1行,是计算比对次数。
在brr数组的第 0行,是根据计算比对次数从小到大排序的列序号。(范围2 to n)
所以结果就是: 9,8,5,12,16,13,4,19,17,3,6,14,7,15,2,18,20,11,10
对应你的arrPrmtIndSort()的作用,但数值要大1 (你是1 to nItemNum)
在brr数组的第1行,是整个列的字典项关键词个数k
呵呵。
待续……
|
|