'Funcion para saber hacia donde se ordenaran los elementos de los vectores
Function CondicionDireccion(v1 As Integer, v2 As Integer, D As String) As Boolean
Dim R As Boolean
If "ASC" = UCase(D) Then
If v1 > v2 Then
R = True
Else
R = False
End If
ElseIf "DES" = UCase(D) Then
If v1 < v2 Then
R = True
Else
R = False
End If
End If
CondicionDireccion = R
End Function
'los parametros son
'M as MSFlexGrid el componente donde se encuentra los datos
'FI as Integer es el valor de la fila donde inician los datos
'FF as Integer es el valor de la fila donde finalizan los datos
'CI as Integer es el valor de la columna donde inician los datos
'CI as Integer es el valor de la columna donde finaliza los datos
'Direccion as String es el valor que indica la direccion de Ordenamiento ASC o DES
Sub OrdenarMatrix(M As MSFlexGrid, FI As Integer, FF As Integer, CI As Integer, CF As Integer, Direccion As String)
Dim vector() As Integer
Dim longVector As Integer
longVector = ((FF - FI + 1) * (CF - CI + 1))
ReDim vector(longVector - 1) As Integer
Dim index As Integer
Dim temp As Integer
'Los datos de la matriz son ingresados a un vector mediante
'el recorrido fila columna
index = 0
For i = FI To FF
For j = CI To CF
vector(index) = M.TextMatrix(i, j)
index = index + 1
Next j
Next i
'El vector es ordenado por medio del Método de la Burbuja
For i = 0 To longVector - 2
For j = i + 1 To longVector - 1
If CondicionDireccion(vector(i), vector(j), Direccion) = True Then
temp = vector(i)
vector(i) = vector(j)
vector(j) = temp
End If
Next j
Next i
'El vector ya ordenado es vaciado a la matrix
index = 0
For i = FI To FF
For j = CI To CF
M.TextMatrix(i, j) = vector(index)
index = index + 1
Next j
Next i
End Sub
Private Sub btnOrdenar_Click()
OrdenarMatrix MSFlexGrid1, 0, 4, 0, 3, "ASC"
OrdenarMatrix MSFlexGrid2, 0, 4, 0, 0, "DES"
End Sub
Private Sub Form_Load()
MSFlexGrid1.TextMatrix(0, 0) = 5
MSFlexGrid1.TextMatrix(0, 1) = 8
MSFlexGrid1.TextMatrix(0, 2) = 4
MSFlexGrid1.TextMatrix(0, 3) = 13
MSFlexGrid1.TextMatrix(1, 0) = 21
MSFlexGrid1.TextMatrix(1, 1) = 53
MSFlexGrid1.TextMatrix(1, 2) = 90
MSFlexGrid1.TextMatrix(1, 3) = 9
MSFlexGrid1.TextMatrix(2, 0) = 2
MSFlexGrid1.TextMatrix(2, 1) = 1
MSFlexGrid1.TextMatrix(2, 2) = 0
MSFlexGrid1.TextMatrix(2, 3) = 57
MSFlexGrid1.TextMatrix(3, 0) = 56
MSFlexGrid1.TextMatrix(3, 1) = 7
MSFlexGrid1.TextMatrix(3, 2) = 20
MSFlexGrid1.TextMatrix(3, 3) = 18
MSFlexGrid1.TextMatrix(4, 0) = 10
MSFlexGrid1.TextMatrix(4, 1) = 15
MSFlexGrid1.TextMatrix(4, 2) = 27
MSFlexGrid1.TextMatrix(4, 3) = 34
MSFlexGrid2.TextMatrix(0, 0) = 8
MSFlexGrid2.TextMatrix(1, 0) = 6
MSFlexGrid2.TextMatrix(2, 0) = 20
MSFlexGrid2.TextMatrix(3, 0) = 11
MSFlexGrid2.TextMatrix(4, 0) = 5
End Sub