Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя
Показано с 11 по 20 из 25
  1. #11
    Аватар для ziggi
    Проверенный

    Статус
    Оффлайн
    Регистрация
    14.05.2015
    Сообщений
    1,181
    Репутация:
    790 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    Глупый вопрос, но зачем _ перед переменной?
    Обычно так обозначают приватную переменную в классе. В Pawn так можно обозначать глобальные static переменные в различных библиотеках. А причина использования здесь не ясна.

  2. Пользователь сказал cпасибо:
    Seviel (17.01.2017)
  3. #12
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от Seviel Посмотреть сообщение
    Глупый вопрос, но зачем _ перед переменной?
    Скорее всего, расчёт на быдлокодеров, которые могут назвать глобальную переменную "array" (чем это чревато см. здесь, пункт 1).
    По сути это ни что иное как поощрение плохих практик программирования, поэтому я бы не советовал так называть аргументы функции и локальные переменные. Проблемы нужно решать, а не избегать.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. 2 пользователя(ей) сказали cпасибо:
    Geebrox (16.01.2017) Seviel (17.01.2017)
  5. #13
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Лично я предпочитаю CombSort

    PHP код:
    stock CombSort(array[], array_size sizeof(array))
    {
        new 
    gap array_size;
        new 
    swapper;
        new 
    boolswap_status true
        while(
    gap != || swap_status)
        {
            
    gap = (gap*10)/13;
            if(!
    gap)
            {
                
    gap 1;
            }
            
    swap_status false;
            for(new 
    0array_size-gapi++)
            {
                if(array[
    i] > array[i+gap])
                {
                    
    swapper = array[i];
                    array[
    i] = array[i+gap];
                    array[
    i+gap] = swapper;
                    
    swap_status true;
                }
            }
        }
        return 
    1;

    10000 чисел пересортировало с таким результатом:

    PHP код:
    CombSort119 ms 
    Последний раз редактировалось Geebrox; 16.01.2017 в 13:22.

  6. #14
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от Geebrox Посмотреть сообщение
    Лично я предпочитаю CombSort

      Открыть/закрыть
    PHP код:
    stock CombSort(array[], array_size sizeof(array))
    {
        new 
    gap array_size;
        new 
    swapper;
        new 
    boolswap_status true
        while(
    gap != || swap_status)
        {
            
    gap = (gap*10)/13;
            if(!
    gap)
            {
                
    gap 1;
            }
            
    swap_status false;
            for(new 
    0array_size-gapi++)
            {
                if(array[
    i] > array[i+gap])
                {
                    
    swapper = array[i];
                    array[
    i] = array[i+gap];
                    array[
    i+gap] = swapper;
                    
    swap_status true;
                }
            }
        }
        return 
    1;



    10000 чисел пересортировало с таким результатом:

    PHP код:
    CombSort119 ms 
    Принимай во внимание то, что характеристики компьютеров с автором темы у вас разные, соответственно тест скорости отдельно этой функции объективно сравнить с теми, что в шапке темы, нельзя)

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Скорее всего, расчёт на быдлокодеров, которые могут назвать глобальную переменную "array" (чем это чревато см. здесь, пункт 1).
    Первый пункт в той теме как-то заморочен. Переменные не обязательно называть именно длинными именами, достаточно просто уникальными
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  7. #15
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Первый пункт в той теме как-то заморочен. Переменные не обязательно называть именно длинными именами, достаточно просто уникальными
    Уникальность переменных с короткими именами ограничена размерами английского алфавита. Под короткими именами, как можно заметить в примере, подразумеваются переменные, состоящие из одной-двух букв.
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

  8. #16
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Принимай во внимание то, что характеристики компьютеров с автором темы у вас разные, соответственно тест скорости отдельно этой функции объективно сравнить с теми, что в шапке темы, нельзя)

    А где ты увидел сравнение или я написал что при сравнение получился такой результат? Я просто оставил свои результаты теста, даже не стал тестировать функции от автора. Если бы сравнивал, то обязательно бы указал все результаты теста включая функции автора!

  9. #17
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
      Открыть/закрыть
    PHP код:
    #include <a_samp>

    SelectionSort(_array[], size sizeof _array){
        for(new 
    0value 00swap 0!= size 1i++){
            
    value i;
            for(
    1!= sizej++){
                if(
    _array] > _arrayvalue ])//max to min
                    
    value j;
            }
            if(
    value != i){
                
    swap _array];
                
    _array] = _arrayvalue ];
                
    _arrayvalue ] = swap;
            }
        }
    }

    BubbleSort(_array[], size sizeof _array){
        for(new 
    00swap 0!= sizei++) {
            for( 
    j++ ) {
                if(
    _array[i] > _array[j]){//max to min
                    
    swap _array[i];
                    
    _array[i] = _array[j];
                    
    _array[j] = swap;
                }
            }
        }
    }

    GnomeSort(_array[], size sizeof _array){
        for( new 
    1swap!= size;  ){
            if(
    _array] >= _array]) ++ j;//max to min
            
    else{
                
    swap _array];
                
    _array] = _array];
                
    _array] = swap ;
                -- 
    j;

                if( 
    == 0)
                    
    1;
            }
        }
    }

    stock CombSort(array[], array_size sizeof(array))
    {
        new 
    gap array_size;
        new 
    swapper;
        new 
    boolswap_status true;
        while(
    gap != || swap_status)
        {
            
    gap = (gap*10)/13;
            if(!
    gap)
            {
                
    gap 1;
            }
            
    swap_status false;
            for(new 
    0array_size-gapi++)
            {
                if(array[
    i] < array[i+gap])
                {
                    
    swapper = array[i];
                    array[
    i] = array[i+gap];
                    array[
    i+gap] = swapper;
                    
    swap_status true;
                }
            }
        }
        return 
    1;
    }

    stock CombSortOpt(array[], array_size sizeof(array))
    {
        static 
    gapswap_statusijendval1val2addr1;
        
    gap array_size;
        
    swap_status true;
        while (
    gap != || swap_status)
        {
            if((
    gap = (gap 10) / 13) == 0)
                
    gap 1;
            
    swap_status false;
            
    0gap 1end array_size gap;
            while (
    end)
            {
                if(array[
    i] < array[++j])
                {
                    
    #emit    load.s.alt    array
                    #emit    load.pri    i
                    #emit    idxaddr
                    #emit    move.alt
                    #emit    load.i
                    #emit    stor.pri    val1
                    #emit    stor.alt    addr1
                    #emit    load.pri    gap
                    #emit    idxaddr
                    #emit    move.alt
                    #emit    load.i
                    #emit    stor.pri    val2
                    #emit    load.pri    val1
                    #emit    stor.i
                    #emit    load.alt    addr1
                    #emit    load.pri    val2
                    #emit    stor.i
                    
    swap_status true;
                }
                ++
    i;
            }
        }
        return 
    1;
    }

    main()
    {
        static 
    src_array[10000];
        static 
    numbers[sizeof(src_array)];
        static 
    t;
        for (new 
    0sizeof(src_array); ++i)
            
    src_array[i] = random(0);
        
    //
        
    numbers src_array;
        
    GetTickCount();
        
    SelectionSort(numbers);
        
    GetTickCount() - t;
        
    printf("SelectionSort: %d"t);
        for (new 
    0sizeof(numbers) - 1; ++i)
            if (
    numbers[i] < numbers[1])
                { 
    printf("SelectionSort: error at position %d"i); break; }
        
    //
        
    numbers src_array;
        
    GetTickCount();
        
    BubbleSort(numbers);
        
    GetTickCount() - t;
        
    printf("BubbleSort: %d"t);
        for (new 
    0sizeof(numbers) - 1; ++i)
            if (
    numbers[i] < numbers[1])
                { 
    printf("BubbleSort: error at position %d"i); break; }
        
    //
        
    numbers src_array;
        
    GetTickCount();
        
    GnomeSort(numbers);
        
    GetTickCount() - t;
        
    printf("GnomeSort: %d"t);
        for (new 
    0sizeof(numbers) - 1; ++i)
            if (
    numbers[i] < numbers[1])
                { 
    printf("GnomeSort: error at position %d"i); break; }
        
    //
        
    numbers src_array;
        
    GetTickCount();
        
    CombSort(numbers);
        
    GetTickCount() - t;
        
    printf("CombSort: %d"t);
        for (new 
    0sizeof(numbers) - 1; ++i)
            if (
    numbers[i] < numbers[1])
                { 
    printf("CombSort: error at position %d"i); break; }

        
    numbers src_array;
        
    GetTickCount();
        
    CombSortOpt(numbers);
        
    GetTickCount() - t;
        
    printf("CombSortOpt: %d"t);
        for (new 
    0sizeof(numbers) - 1; ++i)
            if (
    numbers[i] < numbers[1])
                { 
    printf("CombSortOpt: error at position %d"i); break; }


    Код:
    SelectionSort: 2521
    BubbleSort: 5826
    GnomeSort: 6813
    CombSort: 55
    CombSortOpt: 22
    Изменил порядок сортировки в CombSort на убывающий, как в 1-м посте, и дополнил своим вариантом CombSortOpt, адаптированным под особенности Pawn.
    Хоть я и добавил проверку отсортированных данных, всё равно такое ощущение, будто что-то сделал не так - уж слишком подозрительна разница в результатах.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  10. #18
    Аватар для $continue$
    Пользователь

    Статус
    Оффлайн
    Регистрация
    02.08.2014
    Адрес
    г. Киров (aka Вятка)
    Сообщений
    1,487
    Репутация:
    276 ±
    Наверное, стоит дополнить тему статьей с habrahabr

    И коль гоняетесь за скоростью в Pawn, то почему ещё никто не выложил RadixSort на pro-pawn?

    Я бы реализовал, но у меня не так много времени.
    Value your freedom or you will lose it, teaches history. "Don't bother us with politics," respond those who don't want to learn. (c) Richard Stallman

  11. #19
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от DeimoS Посмотреть сообщение
    Уникальность переменных с короткими именами ограничена размерами английского алфавита. Под короткими именами, как можно заметить в примере, подразумеваются переменные, состоящие из одной-двух букв.
    Ну так короткие это не обязательно однобуквенные, если по тексту.
    Если просто стараться сделать длиннее, то шанс совпадения возрастёт у таких же любителей писать названия длиннее, поэтому важнее присваивать имя, ориентируясь на ситуации в коде, где эта переменная будет использоваться... или просто что-то редко встречающееся.

    Вообще шанс совпадений будет всегда, просто главная мысль как обычно не допускать такой банальщины, как называние переменных слишком абстрактными именами, а-ля "data, str, x". А слишком длинные названия очень часто просто неудобно читать, особенно если они часто вызываются.

    Цитата Сообщение от Geebrox Посмотреть сообщение
    А где ты увидел сравнение или я написал что при сравнение получился такой результат? Я просто оставил свои результаты теста, даже не стал тестировать функции от автора. Если бы сравнивал, то обязательно бы указал все результаты теста включая функции автора!
    Нигде? Я написал про то, что в тестах просто не было необходимости в принципе, ибо они не комплексные
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  12. #20
    Аватар для Geebrox
    Пользователь

    Статус
    Оффлайн
    Регистрация
    24.08.2015
    Адрес
    Ташкент
    Сообщений
    375
    Репутация:
    97 ±
    Цитата Сообщение от $continue$ Посмотреть сообщение
    И коль гоняетесь за скоростью в Pawn, то почему ещё никто не выложил RadixSort на pro-pawn?
    Год назад я переводил почти все типы сортировок, да RadixSort был быстрее остальных (из тех, которых я перевел), но если память не изменяет там используется рекурсия для сортировки.

 

 
Страница 2 из 3 ПерваяПервая 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •