Сборник по задачам и примерам Assembler


Сортировка массивов - часть 4


ПРОГРАММА prg4_101

//..

//prg4_101 - программа на псевдоязыке сортировки прямым обменом 1

//Вход: mas[n] - неупорядоченная последовательность байтовых двоичных значений.

//Выход: mas[n] - упорядоченная последовательность байтовых двоичных значений.

//....-..

ПЕРЕМЕННЫЕ

INTJ3YTE n=8: //количество элементов в сортируемом массиве INT_BYTE mas[n]; //сортируемый массив размерностью п (О..п-l) INTJYTE X: i-0; j-0 // i. j - индексы НАЧ_ПРОГ

ДЛЯ i:=l ДО n-1 //i изменяется в диапазоне L.n-l НАЧ_БЛ0К_1

ДЛЯ j:=n-l ДОВНИЗ i //j изменяется в диапазоне 1+1.,П ЕСЛИ mas[j-l]< mas[j] TO НАЧ_БЛОК_2

x:=mas[j-l]; mas[j-l]:=mas[j]: mas[j]:=X К0Н_БЛ0К_'2 К0Н_БЛ0К_1 КОН_ПРОГ

;prg4_101.asm - программа на ассемблере сортировки прямым выбором 1.

ПОВТОРИТЬ

.data ДЛЯ j:=r ДОВНИЗ 1 //j изменяв!

: задаем массив ЕСЛИ mas[j-l]< mas[j] TO

masdb 44,55.12,42.94.18.06,67 НАЧ^БЛОК_1

n=$-mas x:=mas[j-l]: mas[j-l]:

X db 0 КОН БЛОК 1

ДЛЯ j:-l ДОВНИЗ г //j изменяв"

.code ЕСЛИ mas[j-l]< mas[j] TO

НАЧ_БЛОК_2

;внешний цикл - по 1 x:=mas[j-l]: mas[j-l]:

mov ex, n -1 КОН БЛОК 2

mov si .1 r:=k-l

cycl1: ПОКА (1>г)

push ex КОН_ПРОГ

mov ex n

1 1 1\щ/ V \— Г\ , 1 1 sub ex,si количество повторений внутреннего цикла :prg4 104.asm - программа на аса

push si временно сохраним i - теперь j=n mov si ,n-l

cycl2: :ЕСЛИ mas[j-l]< mas[j] TO .data

mov al ,mas[si-l] :задаем массив

cmpmas[si].al masdb 44.55,12.42.94.18.06.67

ja ml n=$-mas

movx.al :x=mas[j-l] X db 0

mov al ,mas[si] L dw 1

mov mas[si-l],al ;mas[j-l]= mas[j] R dw n

mov al,x k dw n

mov mas[si].al :mas[j]=x

ml: dec si :цикл по j с декрементом n-i раз .code

loop cycl2 ;.... :1:=2: г:=n: k: =n

pop si cycl3: :ДЛЯ j:-r ДОВНИЗ 1

inc si mov si .R : j:=R

pop ex push si

loop cycll sub si.L

;.... mov ex,si количество по

pop si

Второй вариант сортировки прямым обменом

Эту сортировку называют шейкерной (программа prg4_104.asm). Она представляет собой вариант пузырьковой сортировки и предназначена для случая, когда последовательность почти упорядочена. Отличие шейкерной сортировки от пу зырьковой в том, что на каждой итерации меняется направление очередного про хода: слева направо, справа налево.




- Начало -  - Назад -  - Вперед -



Книжный магазин