Не уснул - выдумал с ходу какую-то хреновину, теоретически - должна работать
Code:
sub main()
var i, len = 3
DIM arr[val( str( len ) )]
arr[0] = "Abc";
arr[1] = "123"
arr[2] = "1230"
sort( arr, len )
for i = 0 to len -1
uo.print( arr[ i ] )
next
end sub
Sub sort( arr, len )
var i, j, r, temp
for i = 1 to len -1
j = i
while j > 0
r = getAlphaWord( arr[ j ], arr[ j - 1 ] )
if r == 1 then
temp = arr[ j ]
arr[ j ] = arr[ j - 1 ]
arr[ j - 1 ] = temp
j = j - 1
else
j = 0
endif
wend
next
EndSub
Sub getAlphaWord( word1, word2 )
var i, r, len = strlen( word1 )
if strlen( word1 ) > strlen( word2 ) then
len = strlen( word2 )
endif
for i = 0 to len -1
r = getAlphaSym( word1[ i ], word2[ i ] )
if not r == 0 then
return r
endif
next
if strlen( word2 ) > strlen( word1 ) then
return 1
endif
if strlen( word1 ) > strlen( word2 ) then
return 2
endif
return 0
EndSub
Sub getAlphaSym( sym1, sym2 )
var i, alpha = "0123456789"
alpha = alpha + "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
alpha = alpha + "abcdefghijklmnopqrstuvwxyz"
alpha = alpha + "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
alpha = alpha + "абвгдеёжзийклмнопрстуфхцчшщъыьэюя"
if sym1 == sym2 then
return 0
endif
for i = 0 to strlen( alpha ) -1
if alpha[ i ] == sym1 then
return 1
endif
if alpha[ i ] == sym2 then
return 2
endif
next
return 0
EndSub
Старался действовать наиболее оптимально, но особо большие тексты я бы кормить этой штуке не рекомендовал
