PDA

Просмотр полной версии : Гномий алгоритм сортировки



SaNchez
02.12.2016, 23:30
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.

jerri
03.12.2016, 00:31
а по русски?
а числа 8 битные или 16 битные?

Spectramine
03.12.2016, 00:50
А в чем подвох? Элементарно же всё, алгоритм разложен по полочкам.

SAM style
03.12.2016, 02:50
Упрощенно как-то так... Не совсем по сишной реализации, но суть та же - если при проходе ничего не поменялось, это конец


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

В рег.C хранится флаг "был обмен элементов".

SaNchez
03.12.2016, 08:37
а по русски?
а числа 8 битные или 16 битные?


Пусть будут 8 битные.



А в чем подвох? Элементарно же всё, алгоритм разложен по полочкам.


Согласен, элементарно. Просто интересная задачка для кодеров;)


Упрощенно как-то так... Не совсем по сишной реализации, но суть та же - если при проходе ничего не поменялось, это конец


Хорошая попытка, но неправильно:)

Bedazzle
03.12.2016, 09:43
Хорошая попытка, но неправильно:)

отступ на один назад надо, если был обмен - про это речь?

SaNchez
03.12.2016, 09:58
Ага. Ну и оптимизировать можно.

SAM style
03.12.2016, 13:05
Мда. В 3 ночи что-то проморгал этот момент :v2_dizzy_sleep2: