冒泡排序法的引申,由原先的一维数组排序变更为二维数组排序
excelhome网友的创作
可以先希尔排序
代码:
Sub SortUP_HaoNai()
Dim DataResource() '定义数据源数组
DataResource = Sheets("数据源").[A2].Resize(19, 6).Value '读取数据源,可根据需要随便整些模拟数据
Dim Arr()
ReDim Arr(1 To UBound(DataResource), 1 To 2) '建立二列(排序关键字+原顺序的索引值)的二维数据用于排序
For I = 1 To UBound(DataResource)
Arr(I, 1) = DataResource(I, 6) '本处排序关键字位于第6列
Arr(I, 2) = I '记录原顺序索引值
Next
Dim TempDataKeyWord '建立临时变量存储排序过程中的关键字的值
Dim TempDataIndex '建立临时变量存储排序过程中的关键字对应的索引值
For I = 1 To UBound(Arr) - 1 '冒泡排序法,对单列关键字排序的同时,对索引值也相应更新位置
For J = I + 1 To UBound(Arr)
If Arr(I, 1) > Arr(J, 1) Then '升序排列,如果要降序,直接将大于号换成小于号即可
TempDataKeyWord = Arr(I, 1): TempDataIndex = Arr(I, 2)
Arr(I, 1) = Arr(J, 1): Arr(I, 2) = Arr(J, 2)
Arr(J, 1) = TempDataKeyWord: Arr(J, 2) = TempDataIndex
End If
Next
Next
Dim NewData() '定义排序后的新数组
NewData = [DataResource] '不想多写代码建立同样大小的二维矩阵,直接等同即建立同样大小的数组
For I = 1 To UBound(Arr) '再通过循环之前排好序的两列数据中索引值,将原数组重新按新顺序排列
For J = 1 To UBound(DataResource, 2)
NewData(I, J) = DataResource(Arr(I, 2), J)
Next
Next
[A2].Resize(19, 6) = NewData() '输出数据
End Sub
网友评论