void gnomeSort(int[] a) {
int i = 1;
while(i < a.length) {
if(i==0 || a[i - 1] <= a[i])
i++;
else {
int temp = a[i];
a[i] = a[i - 1];
a[i - 1] = temp;
i--;
}
}
}
Задачка тем кто в теме))) Преобразовать в asm.
Вид для печати
void gnomeSort(int[] a) {
int i = 1;
while(i < a.length) {
if(i==0 || a[i - 1] <= a[i])
i++;
else {
int temp = a[i];
a[i] = a[i - 1];
a[i - 1] = temp;
i--;
}
}
}
Задачка тем кто в теме))) Преобразовать в asm.
а по русски?
а числа 8 битные или 16 битные?
А в чем подвох? Элементарно же всё, алгоритм разложен по полочкам.
Упрощенно как-то так... Не совсем по сишной реализации, но суть та же - если при проходе ничего не поменялось, это конец
В рег.C хранится флаг "был обмен элементов".Код:label:
ld hl,array
ld b,arraysize-1
ld c,0
loop:
ld a,(hl)
inc hl
cp (hl)
jr c,noswap
ld d,(hl)
ld (hl),a
dec hl
ld (hl),d
inc hl
ld c,1
noswap:
djnz loop
dec c
jr z,label
ret
Ага. Ну и оптимизировать можно.
Мда. В 3 ночи что-то проморгал этот момент :v2_dizzy_sleep2: