Сортировка массива методом Шелла или Хоара - Assembler

Узнай цену своей работы

Формулировка задачи:

Нужно написать програму которая будет сортировать массив из 16 елементов быстрой сортировкой(Шелла или Хоара),отсортированый массив записать у файл,найти в етом массиве и вывести наименьший парный елемент.

Решение задачи: «Сортировка массива методом Шелла или Хоара»

textual
Листинг программы
org 100h
jmp start
 
array   db  'Codding Hanter Web Programmer','$'
len     =   ($ - array)-1     ;
fName   db  'data.txt',0      ; имя файла
 
start:                        ;
       mov   ah,9             ; покажем массив на экране
       mov   dx,array         ;
       int   21h              ;
 
       mov   ah,3Ch           ; создать файл!
       mov   dx,fName         ;
       mov   cx,20h           ;
       int   21h              ;
       xchg  ax,bx            ;
       mov   ah,40h           ; запись в файл!
       mov   cx,len           ;
       mov   dx,array         ;
       int   21h              ;
       mov   ah,3Eh           ; закрыть файл!
       int   21h              ;
;-----------------------------------------------------------------------
       mov   cx,len           ; сортировка массива -------------------//
       dec   cx               ;
       mov   si,array         ;
       mov   di,si            ;
sort:  push  cx di si         ;
       xor   bx,bx            ; флаг перестановок
fuck:  lodsw                  ;
       cmp   ah,al            ;
       jae   @@1              ;
       inc   bx               ;
       xchg  ah,al            ;
@@1:   stosw                  ;
       dec   si               ;
       dec   di               ;
       loop  fuck             ;
       pop   si di cx         ;
       or    bx,bx            ; перестановки были?
       jnz   sort             ;
;-----------------------------------------------------------------------
       mov   al,10            ; выводим отсортированный массив на экран
       int   29h              ;
       mov   ah,9             ;
       mov   dx,array         ;
       int   21h              ;
 
exit:
       xor   ax,ax            ;
       int   16h              ;
       int   20h              ;

Объяснение кода листинга программы

  1. Организация кода:
    • Код написан на ассемблере.
    • Используется диапазон адресов от 100h до 109h для переменных и массива.
    • Функции обработки файлов (открытие, запись, закрытие) обернуты в функции 21h, 3Ch, 40h, 3Eh соответственно.
    • Код начинается с метки start.
    • Код завершается с помощью команды перехода на метку exit.
    • В коде присутствуют комментарии, которые описывают назначение некоторых команд.
  2. Использование переменных:
    • Переменная len используется для хранения длины массива.
    • Переменная fName используется для хранения имени файла.
    • Переменные array, si, di, bx используются для хранения значений массива и флагов.
  3. Сортировка массива методом Шелла (Хоара):
    • Код для сортировки массива начинается с метки sort.
    • Используется цикл loop, который выполняется до тех пор, пока не будет выполнено условие завершения цикла.
    • Внутри цикла выполняется алгоритм сортировки Шелла (Хоара), который сравнивает пары соседних элементов массива и меняет их местами при необходимости.
    • Для обмена значениями используется команда xchg.
    • После выполнения цикла выполняется команда pop, чтобы восстановить значения переменных si, di и cx.
    • Затем проверяется флаг bx, который указывает, были ли выполнены перестановки в процессе сортировки.
    • Если перестановки были, то цикл повторяется.
    • Если перестановок не было, то код продолжает выполнение.
  4. Вывод отсортированного массива на экран:
    • Код для вывода отсортированного массива на экран начинается с метки exit.
    • Используется команда int 29h, чтобы вывести отсортированный массив на экран.
    • Затем выполняется команда int 21h, чтобы отобразить символ перевода строки.
    • Код завершается командой int 16h, чтобы завершить работу программы.

Оцени полезность:

9   голосов , оценка 4 из 5
Похожие ответы