Доброе время, mrdime
Тут вопрос не в алгоритме сортировки, а в алгоритме сравнения. Расширенная идея от KDPoid.
Код:
Function IsAlphabetGreater(vStr1, vStr2)
Const cCharList = "АБВГҐДЕЁЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
Dim i, vChar1, vChar2, vCharCode1, vCharCode2, vOut
IsAlphabetGreater = False
For i = 1 To IIf(Len(vStr1) < Len(vStr2), Len(vStr1), Len(vStr2)) + 1
vChar1 = Mid(vStr1, i, 1)
vChar2 = Mid(vStr2, i, 1)
vCharCode1 = InStr(1, cCharList, vChar1, vbTextCompare)
vCharCode2 = InStr(1, cCharList, vChar2, vbTextCompare)
If (vCharCode1 = 0) Or (vCharCode2 = 0) Then
vCharCode1 = Asc(vChar1)
vCharCode2 = Asc(vChar2)
End If
If vCharCode1 <> vCharCode2 Then
If vCharCode1 > vCharCode2 Then IsAlphabetGreater = True
Exit For
End If
Next
End Function
Тут вопрос не в алгоритме сортировки, а в алгоритме сравнения. Расширенная идея от KDPoid.
Код:
Function IsAlphabetGreater(vStr1, vStr2)
Const cCharList = "АБВГҐДЕЁЄЖЗИІЇЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
Dim i, vChar1, vChar2, vCharCode1, vCharCode2, vOut
IsAlphabetGreater = False
For i = 1 To IIf(Len(vStr1) < Len(vStr2), Len(vStr1), Len(vStr2)) + 1
vChar1 = Mid(vStr1, i, 1)
vChar2 = Mid(vStr2, i, 1)
vCharCode1 = InStr(1, cCharList, vChar1, vbTextCompare)
vCharCode2 = InStr(1, cCharList, vChar2, vbTextCompare)
If (vCharCode1 = 0) Or (vCharCode2 = 0) Then
vCharCode1 = Asc(vChar1)
vCharCode2 = Asc(vChar2)
End If
If vCharCode1 <> vCharCode2 Then
If vCharCode1 > vCharCode2 Then IsAlphabetGreater = True
Exit For
End If
Next
End Function