1. Си / Говнокод #11347

    +133

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    int * lPtr=item;
    int * lPtrEnd = item + count;
    
    for (lPtr = item ; lPtr < lPtrEnd && *lPtr<fid ; lPtr+=4);
    if( lPtr >= lPtrEnd ) lPtr=lPtrEnd-1; // last element
    if(*lPtr != fid)
    {
            if(--lPtr >=item)
            {   
                    if(*lPtr!= fid)
                    {   
                            if(--lPtr >=item)
                            {   
                                    if(*lPtr!= fid)
                                    {   
                                            if(--lPtr >=item)
                                            {   
                                                    if(*lPtr!= fid)
                                                    {   
                                                            break; // value not found
                                                    }   
                                            } else break;
                                    }   
                            }  else break;
                    }   
            } else break;
    }
    
    
    if( lPtr > item)
    {
            while ( *(lPtr-1) == fid && lPtr > item) lPtr--; // first ocurence of fid
    }

    Быстрый алгоритм поиска

    Запостил: wtfcode, 03 Июля 2012

    Комментарии (43) RSS

    • > Быстрый алгоритм поиска
      "Быстрый" алгоритм поиска?
      Ответить
      • O(1)
        Ответить
        • Ну да, слона точку с запятой то я и не заметил.

          UPD: обидно, что не скомпилится из-за бряков вне цикла.
          Ответить
          • Покончим с произволом компиляторов C! Пусть брякаются циклы, пусть брякаются свитчи, ифы, процедуры, траи и катчи, пусть брякаются просто вложенные блоки из скобочек, пусть брякаются сами бряки:
            break {
            break;
            };
            и наконец пусть брякается вся программа, одним большим глобальным бряком!
            Ответить
            • You see, young break. Those breaks don't care about break break. They just want to take your break and break their own break. The only break for this is to break.
              Ответить
            • говорят, мы бряки бреки, как выносит нас земля?
              Ответить
            • А вот бряк из блока пригодился бы
              Ответить
              • А как тогда писать код типа:
                for (...) {
                    if (x == 5) {
                        /* немного кода */
                        break;
                    }
                }
                Ответить
                • break if;
                  break for;

                  Или метки делать.
                  Ответить
                  • ада головного мозга
                    Ответить
                  • Кстати прикольная идея.
                    break for for; // бряк из двух вложенных циклов for...
                    Ответить
                    • все-таки метка читабельней...
                      Ответить
                      • break if for;

                        Вообще поставит в ступор %)
                        Ответить
                        • break program;
                          Ответить
                          • Нужно дать возможность именовать блоки { } и потом брейк или континуе на имя блока
                            Ответить
                            • И получим javascript
                              Ответить
                            • Проще указывать глубину выхода. Что-то типа break(2); Беда будет в том случае, когда добавил (удалил) новый уровень вложенности, а бряки не проверил.
                              Ответить
                              • > а бряки не проверил
                                Вот поэтому лучше или метка или бряк только на один уровень...
                                Ответить
                    • так и вижу мечту тараса
                      function f of x, y returning int
                      where
                        x is int,
                        y is int
                      begin function f of x, y returning int
                        loop for int i from 0 to N do
                        begin loop for int i from 0 to N
                          loop for int j from 0 to M do
                          begin loop for int j from 0 to M
                            ....
                            break loop for int j from 0 to M, loop for int i from 0 to N;   { выход из двух циклов!!! }
                            ....
                          end loop for int j from 0 to M;
                        end loop for int i from 0 to N;
                        f returning 100;
                      end function f of x, y returning int
                      where x is int, y is int;

                      зы исправил на отступы в 2 пробела
                      Ответить
                      • Это боян, есть старая шутка про ассемблер в стиле Ada:

                        move eax as integer to edx as integer at central processing unit
                        Ответить
                      • Выглядит как древнее песнопение
                        Ответить
                    • break while do for
                      Ответить
              • Ебать... Я же пошутил.
                Ответить
        • O(1/n)
          Ответить
          • O(0)
            Ответить
            • O(-n)
              Ответить
              • O(∞)
                Ответить
                • Алгоритм который всегда завершается ещё вчера.
                  Ответить
                  • Есть вот в некоторых функциональных языках плейсхолдер _, обозначающий "не важно".
                    O(_)
                    К сожалению, кодеры пишущие с такой сложностью алгоритма, ещё не перевелись....
                    Ответить
                    • O(_|_)
                      Ответить
                    • А в каких?
                      И кстати, пока есть возможность, хотел тут с функциональщиной познакомиться, какой для этого язык подойдёт?
                      Ответить
                      • JavaScript
                        Ответить
                        • А если универсальный язык нужен?

                          Плюс JavaScript вроде не мешает в императивном стиле писать.

                          UPD: Или это ответ на первый вопрос?
                          Ответить
                          • > Плюс JavaScript вроде не мешает в императивном стиле писать.
                            Но дает писать и в функциональном ;) И даже тот же хаскель дает писать императивно...
                            Ответить
                            • Хм. Ладно, но вот если брать из этих языков, какой позволит без лишних криков "ЧтооооОо?" познать ФП?

                              - Scheme
                              - Scala
                              - Nemerle
                              - Haskell
                              Ответить
                              • В Scheme можно прочувствовать в основном базовые идеи. Минимум сахара и возможностей, всё прозрачно. В Haskell всё по хардкору: ленивые вычисления, алгебра типов, монады, сопоставление с образцом. В Scala многое из этого есть, но в ней куча фич и возможностей, которые к ФП имеют весьма посредственное отношение.
                                С Nemerle не работал, но подозреваю, что это аналог Scala под .NET с мощной системой метапрограммирвания, что, опять же, отвлекает нас от ФП.

                                В любом случае, начать со Scheme будет весьма полезно.
                                Ответить
    • > Быстрый алгоритм поиска
      http://www.youtube.com/watch?v=8BmBSQUdLYA
      Ответить

    Добавить комментарий