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

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

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

ПРОГРАММА prg4_104 mov mas[si-l].al :mas[j- mov al ,x //prg4_104 - программа на псевдоязыке сортировки прямым обменом 2 (шейкерной) mov mas[si].al ;mas[j]:-x// Вход: mas[n] - неупорядоченная последовательность байтовых двоичных значений. mov k.si :k:=j //Выход: mas[n] -упорядоченная последовательность байтовых двоичных значений. ml: dec si :j:=j-l loop cycll ПЕРЕМЕННЫЕ mov ax.k INT BYTE n=8:// количество элементов в сортируемом массиве inc ax INT BYTE mas[n]: //сортируемый массив размерностью п (О..п-l) mov Lax :L:=k+l INT BYTE X: 1-0; j=0: г=0: 1=0: k=0// i. j. г. 1. k - индексы : цикл cycl2 :ДЛЯ j:=l ДОВНИЗ НАЧ_ПРОГ mov si.L :j:=L 1:=2: r:=n; k:=n mov ax.R ПОВТОРИТЬ ДЛЯ j:=r ДОВНИЗ 1 //j изменяется от 1 до г ЕСЛИ mas[j-l]< mas[j] TO НАЧ_БЛОК_1 x:=mas[j-l]: mas[j-l]:=mas[j]: mas[j]:=X: k:=j КОН_БЛОК_1 ДЛЯ j:=l ДОВНИЗ г// j изменяется от г до 1 ЕСЛИ mas[j-l]< mas[j] TO НАЧ_БЛОК_2 x:-mas[j-l]; mas[j-l]:=mas[j]; mas[j]:=X; k:=j К0Н_БЛ0К_2 r:=k-l ПОКА (1>г) КОН_ПРОГ
 * prg4_104.asm - программа на ассемблере сортировки прямым выбором 2 (шейкерной).

.data
 * задаем массив

masdb 44.55.12.42.94.18.06.67 n=$-mas X db 0 L dw 1 R dw n k dw n .code cycl3: :ДЛЯ ДОВНИЗ 1 mov si.R :j:=R push si sub si.L mov ex,si количество повторений цикла cycll pop si dec si cycll: :ЕСЛИ mas[j-l]< mas[j] TO mov al,mas[si-1] emp al.mas[si] jna ml mov al,mas[si-1] mov x.al ;x:=mas[j-l] mov al.mas[si] mov mas[si-l].al :mas[j-l]:=mas[j] mov a 1, x mov mas[si].al :mas[j]:=x mov k.si ;k:=j ml: dec si :j:=j -1 loop cycll mov ax.k inc ax mov L.ax :L:=k+l : цикл сус12 :ДЛЯ j:-l ДОВНИЗ г mov si.L :j:=L mov ax.R sub ax.L mov ex.ax количество повторений цикла сус12 cyc12: mov al.mas[si-l] :ЕСЛИ mas[j-l]< mas[j] TO emp al.mas[si] jna m2 mov al,mas[si-l] mov x.al ;x:=mas[j-l] mov al.mas[si] mov mas[si-l].al ;mas[j-l]:=mas[j] mov al .x mov mas[si].al :mas[j]:=x mov k.s1 :k:=j m2: inc si :j:=j+l loop cycl2 mov ax.k dec ax mov R.ax :R:=k-1 emp L.ax ;L>R - ? jae $+5 jmp cycl3
 * .... :1:=2: r:=n: k:=n

Сложные структуры данных-[Электронный ресурс]. Режим доступа: http://exzilnetik.narod.ru/html/aeaaa12.html