Алгоритм быстрого поиска

Тема в разделе "WASM.BEGINNERS", создана пользователем TOLSTOPUZ, 16 авг 2008.

  1. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Люди, у кого нить есть реализованный алгос под названием "быстрая сортировка" ?
    (Только на masm)
    Нужно отсортировать одномерный массив 8-байтных значений , но пузырьковая сортировка тормозит, так как массив очень уж большой.
     
  2. bigredcat

    bigredcat New Member

    Публикаций:
    0
    Регистрация:
    3 сен 2007
    Сообщения:
    54
    Поиск по quicksort в googl.ru, например, дает массу ссылок. Первая из них ведет на Википедию, где описан данный алгоритм и приведен пример реализации на нескольких языках программирования в нескольких вариантах.
    http://ru.wikipedia.org/wiki/Быстрая_сортировка
     
  3. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Да был я ещё ночью на этой самой ссылке.
    Что толку - я не знаю вообще СИ.
    Ещё там Руби какой-то... Питон, блин...

    Мне на асме надо.
     
  4. Arthur

    Arthur New Member

    Публикаций:
    0
    Регистрация:
    27 янв 2007
    Сообщения:
    494
    TOLSTOPUZ
    Ну на асме, так на асме:

    Код (Text):
    1. ; процедура quick_sort
    2. ; сортирует массив слов методом быстрой сортировки.
    3. ; вход: ds:bx - адрес массива
    4. ;         dx = число элементов массива
    5.  
    6. quick_sort  proc    near
    7.     cmp dx, 1
    8.     jle qsort_done
    9.     xor di, di
    10.     mov si, dx
    11.     dec si
    12.     shl si, 1
    13.     mov ax, word ptr [bx]
    14.  
    15. step_2:
    16.     cmp word ptr [bx][si], ax
    17.     jle step_3
    18.     sub si, 2
    19.     jmp short step_2
    20.  
    21. step_3:
    22.     cmp si, di
    23.     je  step_5
    24.     add di, 2
    25.     cmp word ptr [bx][di], ax
    26.     jl  step_3
    27.  
    28. step_4:
    29.     mov cx, word ptr [bx][di]
    30.     xchg    cx, word ptr [bx][si]
    31.     mov word ptr [bx][di], cx
    32.     jmp short_2
    33.  
    34. step_5:
    35.     xchg    ax, word ptr [bx][di]
    36.     mov word ptr [bx], ax
    37.     push    dx
    38.     push    di
    39.     push    bx
    40.  
    41.     mov dx, di
    42.     shr dx, 1
    43.     call    quick_sort
    44.  
    45.     pop bx
    46.     pop di
    47.     pop dx
    48.    
    49.     add bx, di
    50.     add bx, 2
    51.     shr di, 1
    52.     inc di
    53.     sub dx, di
    54.     call    quick_sort
    55. qsort_done: ret
    56. quick_sort  endp
    Во 1-вых алгоритм был взят из книги Зубкова С. В. "Программирование на ассемблере под DOS, Windows, UNIX" - сложные приемы программирования (сортировки). Во 2-рых все набивал на скорую руку.

    Так что если что-то непонятно ищем книжку.
     
  5. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Спасибо, что откликнулся и помог.
    шас я его попробую.
     
  6. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    TOLSTOPUZ
    Поиск на сайте рулит. Название топика сбивает с толка. Наверное, должно быть алгоритм быстрой сортировки. Здесь реализация на MASM (на FASM и NASM переписать не сложно) сортировок: пузырьковой, шейкером, пирамидальной, прямым включением, прямым выбором, Шелла, Хоара (быстрая сортировка) на примере одного и того же массива двойных слов
     
  7. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Да, с названием ошибочка. Утро уже было, запарился. За ссылочку спасибо. Взял себе всё!

    P.S.
    У Вас там целый тутор получился про сортировки. :)
    Тема-то кстати хорошая...
     
  8. Magnum

    Magnum New Member

    Публикаций:
    0
    Регистрация:
    29 дек 2007
    Сообщения:
    925
    TOLSTOPUZ
    не вижу ничего сложного в сях.
    Читать сишный код я примерно за неделю научился.
    Еще через 3 месяца уже уверенно писал в процедурном стиле.
    Сейчас учу классы, методы и пр.

    Довольно простой язык. ИМХО
     
  9. TOLSTOPUZ

    TOLSTOPUZ New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2008
    Сообщения:
    509
    Приятно читать. А то мне наговорили "доброжелатели", что это самый тяжёлый язык в мире. Я так думаю, чито си+асм очень мощное соединение.
    Вы наверное много книжек пересмотрели прежде чем на чём-то остановиться. Не порекомендуете, с какой начать чтение?

    (Извиняюсь за ОФТОПИК)

    И ещё вопрос Вот Си... Как насчёт вставки в сишный код ассемблерного кода? Нет сложностей \ проблем? Я просто не знаю как и что...
     
  10. Mikl___

    Mikl___ Супермодератор Команда форума

    Публикаций:
    14
    Регистрация:
    25 июн 2008
    Сообщения:
    3.914
    Код (Text):
    1. строки на С/С++
    2. asm { строки на всторенном асме}