N
Neal Zimm
Hi All,
I have a bubble sort failing when
"a" seems to compare greater then "B"
in a binary text compare. There are notes
in the bubble sort loop below.
Other more 'complicated' data tests well, also
in the notes.
Help is appreciated.
Thanks,
Neal Zimm
Sub zBubble_Sort()
Dim CompareHow As VbCompareMethod
Dim Ix As Long
Dim Jx As Long
Dim Lo As Long, Hi As Long
Dim KeyAy As Variant
Dim sHold As String
Dim sInput As String
Dim sOutput As String
' All binary compares
' KeyAy = Array("a", "A") 'good, result is Aa
' KeyAy = Array("b", "B") 'good, result is Bb
' KeyAy = Array("b", "a", "A") 'good, result = Aab
' KeyAy = Array("B", "a", "A") 'NOPE, result = ABa
CompareHow = vbBinaryCompare
''CompareHow = vbTextCompare
KeyAy = Array("b", "a", "A", "B") 'crap, result = ABab expect AaBb ??
GoSub SortTest
'the above has a problem, see sort. Bummer is that
'the data below works as expected.
KeyAy = Array("z i m", "z i M", "z I m", "z I M", "Z I m", "Z I M")
GoSub SortTest
For Ix = Lo To Hi
sOutput = sOutput & KeyAy(Ix) & vbCr
Next Ix
MsgBox sOutput
Exit Sub
SortTest:
Lo = LBound(KeyAy)
Hi = UBound(KeyAy)
For Ix = Lo To Hi
sInput = sInput & KeyAy(Ix)
Next Ix
'sort ascending
For Ix = Lo To (Hi - 1)
For Jx = (Ix + 1) To Hi
'The failure is @ Ix=2 "a", it compares greater
' than Jx=4 of "B" WHY ??
If StrComp(KeyAy(Ix), KeyAy(Jx), CompareHow) = 1 Then
sHold = KeyAy(Jx)
KeyAy(Jx) = KeyAy(Ix)
KeyAy(Ix) = sHold
End If
Next Jx
Next Ix
For Ix = Lo To Hi
sOutput = sOutput & KeyAy(Ix)
Next Ix
MsgBox sInput & vbCr & vbCr & sOutput
sInput = ""
sOutput = ""
Return
End Sub
I have a bubble sort failing when
"a" seems to compare greater then "B"
in a binary text compare. There are notes
in the bubble sort loop below.
Other more 'complicated' data tests well, also
in the notes.
Help is appreciated.
Thanks,
Neal Zimm
Sub zBubble_Sort()
Dim CompareHow As VbCompareMethod
Dim Ix As Long
Dim Jx As Long
Dim Lo As Long, Hi As Long
Dim KeyAy As Variant
Dim sHold As String
Dim sInput As String
Dim sOutput As String
' All binary compares
' KeyAy = Array("a", "A") 'good, result is Aa
' KeyAy = Array("b", "B") 'good, result is Bb
' KeyAy = Array("b", "a", "A") 'good, result = Aab
' KeyAy = Array("B", "a", "A") 'NOPE, result = ABa
CompareHow = vbBinaryCompare
''CompareHow = vbTextCompare
KeyAy = Array("b", "a", "A", "B") 'crap, result = ABab expect AaBb ??
GoSub SortTest
'the above has a problem, see sort. Bummer is that
'the data below works as expected.
KeyAy = Array("z i m", "z i M", "z I m", "z I M", "Z I m", "Z I M")
GoSub SortTest
For Ix = Lo To Hi
sOutput = sOutput & KeyAy(Ix) & vbCr
Next Ix
MsgBox sOutput
Exit Sub
SortTest:
Lo = LBound(KeyAy)
Hi = UBound(KeyAy)
For Ix = Lo To Hi
sInput = sInput & KeyAy(Ix)
Next Ix
'sort ascending
For Ix = Lo To (Hi - 1)
For Jx = (Ix + 1) To Hi
'The failure is @ Ix=2 "a", it compares greater
' than Jx=4 of "B" WHY ??
If StrComp(KeyAy(Ix), KeyAy(Jx), CompareHow) = 1 Then
sHold = KeyAy(Jx)
KeyAy(Jx) = KeyAy(Ix)
KeyAy(Ix) = sHold
End If
Next Jx
Next Ix
For Ix = Lo To Hi
sOutput = sOutput & KeyAy(Ix)
Next Ix
MsgBox sInput & vbCr & vbCr & sOutput
sInput = ""
sOutput = ""
Return
End Sub