Сортировка по алфавиту
Moderators: Murderator+, Murderator
Сортировка по алфавиту
Есть у кого-нибудь идеи как сделать сортировку выводимых значений по алфавиту?
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
А в чём собственно говоря проблема ?
Хвать алгоритму и вперёд
Будь бы ещё в инже такой хитрый функций, как ord() - вообще быстро бы работало
PS: Если не усну, попробую что-нибудь из головы выдумать
Хвать алгоритму и вперёд


PS: Если не усну, попробую что-нибудь из головы выдумать

YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Не уснул - выдумал с ходу какую-то хреновину, теоретически - должна работать
Старался действовать наиболее оптимально, но особо большие тексты я бы кормить этой штуке не рекомендовал

Code: Select all
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
Старался действовать наиболее оптимально, но особо большие тексты я бы кормить этой штуке не рекомендовал

YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Grin wrote:самое простое что можно с инжой сделать это с делать для слов второй масив который будет содержать их цифровой эквивалент.
много слов то?
А чем код выше тебе не по душе ?)
И массив не надо - в строчку читабельнее..
Хотя, как вариант:
Code: Select all
DIM alpha[ 256 ]
for i = 0 to 255
alpha[ i ] = chr( i )
next
Винда примерно так и сортирует вроде

YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Destruction wrote:А чем код выше тебе не по душе ?)
И массив не надо - в строчку читабельнее..
я писал пост еще твоего не было;)
а то что ты написал в принципе ничего лутше не придумать, напильником если только обработать (код можно сократить)...
все равно так или иначе надо будет сравнивать по символьно...
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Grin wrote:Destruction wrote:А чем код выше тебе не по душе ?)
И массив не надо - в строчку читабельнее..
я писал пост еще твоего не было;)
а то что ты написал в принципе ничего лутше не придумать, напильником если только обработать (код можно сократить)...
все равно так или иначе надо будет сравнивать по символьно...
Ну, как вариант - можно забивать массивчик через chr(), как я предложил выше, но тут у меня дай боже - 100 символов, а то будет 256 - упадёт производительность

А касательно напильника - работай, если хочешь - я не спец по сортировкам, я просто написал самое логичное, что пришло в голову

И про сокращение кода не спорю - вот например переменная r там нафиг не сдалась ))
YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
korzh wrote:Идею уловил, вроде работает. Только проблемка осталась, как отсортировать переменные не из массива, а из ини файла?
Считать ini-файл в массив, отсортировать, сохранить обратно.
Ффсё, файл отсортирован

А вообще - пиши по-русски, а то обижусь и уйду из топика

YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
korzh wrote:а пля
можно проще, написать функцию генерации массива из ини файла, а то я чтото подумал что ты имел ввиду руками вбивать
Оно тебе точно надо?...
PS: А такой способ сортировки вроде пузырьковым называется.. помню года 4 назад где-то читал..

YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
korzh wrote:Да я тоже вспонмил, в начале семестра было, после каникул все забыл
В общем всё, вопрос исчерпан.
Всё, что тебе по-сути надо - это функция getAlphaWord, которая вычисляет, которая строка наиболее "алфавитная"

Так, что юзай как заблагорассудится. Алгоритм пузырьков непосредственно в ф-ции sort().
Всё просто и удобно

YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
ну 0 до 255 просто смысла нет, да и не в этом угловатость.
до статочно определить какое слово длиней
и начать по символьно поиск в какой из строк ты быстрей найдешь символ из ряда, но предварительно проверяешь не встречается ли этот символ в другой строке.
кода прилично меньше будет. да и перебор букв можно уменьшить.
до статочно определить какое слово длиней
и начать по символьно поиск в какой из строк ты быстрей найдешь символ из ряда, но предварительно проверяешь не встречается ли этот символ в другой строке.
кода прилично меньше будет. да и перебор букв можно уменьшить.
-
- Junior Expert
- Posts: 3221
- Joined: 2004-06-24 22:08:56
Простым смертным, вроде меня, твои слова ничего не говорят.
Возьми да сделай, а я уж на код погляжу
Вспоминается ситуация, с моим автоламбером, когда я выдумывал алгоритму для поиска ближайшего дерева, а мне Edred говорил в каждом посте, что я еретик (ну примерно так, дословно не помню, перечитывать лень)..
Возьми да сделай, а я уж на код погляжу

Вспоминается ситуация, с моим автоламбером, когда я выдумывал алгоритму для поиска ближайшего дерева, а мне Edred говорил в каждом посте, что я еретик (ну примерно так, дословно не помню, перечитывать лень)..

YokoInjection CodeSweeper
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom
Function not found?
Possession of mathematics at the level of art - a gift that is only available for election.
Sorry for my clumsy English.
Telegram: @tatikom