Page 1 of 2
Сортировка по алфавиту
Posted: 2008-02-15 00:45:34
by korzh
Есть у кого-нибудь идеи как сделать сортировку выводимых значений по алфавиту?
Posted: 2008-02-15 01:04:45
by Destruction
А в чём собственно говоря проблема ?
Хвать алгоритму и вперёд

Будь бы ещё в инже такой хитрый функций, как ord() - вообще быстро бы работало
PS: Если не усну, попробую что-нибудь из головы выдумать

Posted: 2008-02-15 01:29:46
by Destruction
Не уснул - выдумал с ходу какую-то хреновину, теоретически - должна работать
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
Старался действовать наиболее оптимально, но особо большие тексты я бы кормить этой штуке не рекомендовал

Posted: 2008-02-15 01:32:11
by Grin
самое простое что можно с инжой сделать это с делать для слов второй масив который будет содержать их цифровой эквивалент.
много слов то?
Posted: 2008-02-15 01:34:49
by Destruction
Grin wrote:самое простое что можно с инжой сделать это с делать для слов второй масив который будет содержать их цифровой эквивалент.
много слов то?
А чем код выше тебе не по душе ?)
И массив не надо - в строчку читабельнее..
Хотя, как вариант:
Code: Select all
DIM alpha[ 256 ]
for i = 0 to 255
alpha[ i ] = chr( i )
next
Винда примерно так и сортирует вроде

Posted: 2008-02-15 01:37:06
by korzh
Destruction wrote:Не уснул - выдумал с ходу какую-то хреновину, теоретически - должна работать

Старался действовать наиболее оптимально, но особо большие тексты я бы кормить этой штуке не рекомендовал

Спасибо, попробую сейчас, отпишусь
А слов 100-200 гдето)
Posted: 2008-02-15 01:41:43
by Grin
Destruction wrote:А чем код выше тебе не по душе ?)
И массив не надо - в строчку читабельнее..
я писал пост еще твоего не было;)
а то что ты написал в принципе ничего лутше не придумать, напильником если только обработать (код можно сократить)...
все равно так или иначе надо будет сравнивать по символьно...
Posted: 2008-02-15 01:43:27
by Destruction
Grin wrote:Destruction wrote:А чем код выше тебе не по душе ?)
И массив не надо - в строчку читабельнее..
я писал пост еще твоего не было;)
а то что ты написал в принципе ничего лутше не придумать, напильником если только обработать (код можно сократить)...
все равно так или иначе надо будет сравнивать по символьно...
Ну, как вариант - можно забивать массивчик через chr(), как я предложил выше, но тут у меня дай боже - 100 символов, а то будет 256 - упадёт производительность
А касательно напильника - работай, если хочешь - я не спец по сортировкам, я просто написал самое логичное, что пришло в голову
И про сокращение кода не спорю - вот например переменная
r там нафиг не сдалась ))
Posted: 2008-02-15 01:46:21
by korzh
Идею уловил, вроде работает. Только проблемка осталась, как отсортировать переменные не из массива, а из ини файла?
Posted: 2008-02-15 01:47:13
by Destruction
korzh wrote:Идею уловил, вроде работает. Только проблемка осталась, как отсортировать переменные не из массива, а из ини файла?
Считать ini-файл в массив, отсортировать, сохранить обратно.
Ффсё, файл отсортирован
А вообще - пиши по-русски, а то обижусь и уйду из топика

Posted: 2008-02-15 01:49:08
by korzh
ну это то понятно, только при каждом добавлении чего то нового в ини файл придеться лезть в скрипт и дописывать массив..
Posted: 2008-02-15 01:50:18
by korzh
а пля
можно проще, написать функцию генерации массива из ини файла, а то я чтото подумал что ты имел ввиду руками вбивать

Posted: 2008-02-15 01:51:20
by Destruction
korzh wrote:а пля
можно проще, написать функцию генерации массива из ини файла, а то я чтото подумал что ты имел ввиду руками вбивать

Оно тебе точно надо?...
PS: А такой способ сортировки вроде пузырьковым называется.. помню года 4 назад где-то читал..

Posted: 2008-02-15 01:53:29
by korzh
Да я тоже вспонмил, в начале семестра было, после каникул все забыл

Posted: 2008-02-15 01:55:12
by Destruction
korzh wrote:Да я тоже вспонмил, в начале семестра было, после каникул все забыл

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

Posted: 2008-02-15 01:55:26
by Grin
ну 0 до 255 просто смысла нет, да и не в этом угловатость.
до статочно определить какое слово длиней
и начать по символьно поиск в какой из строк ты быстрей найдешь символ из ряда, но предварительно проверяешь не встречается ли этот символ в другой строке.
кода прилично меньше будет. да и перебор букв можно уменьшить.
Posted: 2008-02-15 01:58:06
by Destruction
Простым смертным, вроде меня, твои слова ничего не говорят.
Возьми да сделай, а я уж на код погляжу
Вспоминается ситуация, с моим автоламбером, когда я выдумывал алгоритму для поиска ближайшего дерева, а мне Edred говорил в каждом посте, что я еретик (ну примерно так, дословно не помню, перечитывать лень)..

Posted: 2008-02-15 02:02:30
by Grin
агоритм что утебя не класический пузырек, а модернизированый;)
Posted: 2008-02-15 02:03:23
by korzh
Вообщем сделал, спасибо

Posted: 2008-02-15 03:08:40
by korzh
оказалось не до конца сделал
Сортируется только один параметр, как связать с ним остальные?