Сортировка по алфавиту

Anything and all.

Moderators: Murderator+, Murderator

korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Сортировка по алфавиту

Post by korzh »

Есть у кого-нибудь идеи как сделать сортировку выводимых значений по алфавиту?
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

А в чём собственно говоря проблема ?

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

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
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post 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


Старался действовать наиболее оптимально, но особо большие тексты я бы кормить этой штуке не рекомендовал :)
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
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

самое простое что можно с инжой сделать это с делать для слов второй масив который будет содержать их цифровой эквивалент.
много слов то?
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

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
korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Post by korzh »

Destruction wrote:Не уснул - выдумал с ходу какую-то хреновину, теоретически - должна работать :)

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


Спасибо, попробую сейчас, отпишусь :)

А слов 100-200 гдето)
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

Destruction wrote:А чем код выше тебе не по душе ?)

И массив не надо - в строчку читабельнее..



я писал пост еще твоего не было;)
а то что ты написал в принципе ничего лутше не придумать, напильником если только обработать (код можно сократить)...
все равно так или иначе надо будет сравнивать по символьно...
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

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
korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Post by korzh »

Идею уловил, вроде работает. Только проблемка осталась, как отсортировать переменные не из массива, а из ини файла?
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

korzh wrote:Идею уловил, вроде работает. Только проблемка осталась, как отсортировать переменные не из массива, а из ини файла?

Считать ini-файл в массив, отсортировать, сохранить обратно.

Ффсё, файл отсортирован :)

А вообще - пиши по-русски, а то обижусь и уйду из топика :evil:
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
korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Post by korzh »

ну это то понятно, только при каждом добавлении чего то нового в ини файл придеться лезть в скрипт и дописывать массив..
korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Post by korzh »

а пля
можно проще, написать функцию генерации массива из ини файла, а то я чтото подумал что ты имел ввиду руками вбивать :roll:
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

korzh wrote:а пля
можно проще, написать функцию генерации массива из ини файла, а то я чтото подумал что ты имел ввиду руками вбивать :roll:

Оно тебе точно надо?...

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
korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Post by korzh »

Да я тоже вспонмил, в начале семестра было, после каникул все забыл :(
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

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
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

ну 0 до 255 просто смысла нет, да и не в этом угловатость.
до статочно определить какое слово длиней
и начать по символьно поиск в какой из строк ты быстрей найдешь символ из ряда, но предварительно проверяешь не встречается ли этот символ в другой строке.

кода прилично меньше будет. да и перебор букв можно уменьшить.
Destruction
Junior Expert
Posts: 3221
Joined: 2004-06-24 22:08:56

Post by Destruction »

Простым смертным, вроде меня, твои слова ничего не говорят.

Возьми да сделай, а я уж на код погляжу :)

Вспоминается ситуация, с моим автоламбером, когда я выдумывал алгоритму для поиска ближайшего дерева, а мне 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
Grin
Expert!
Posts: 2580
Joined: 2005-05-04 14:05:19
Location: Москва

Post by Grin »

агоритм что утебя не класический пузырек, а модернизированый;)
korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Post by korzh »

Вообщем сделал, спасибо ;)
korzh
Posts: 220
Joined: 2007-04-26 23:35:15

Post by korzh »

оказалось не до конца сделал :(
Сортируется только один параметр, как связать с ним остальные?
Post Reply