#========================================================= # void bubblesort(int array[], int count) # { # int idx, jdx, swapv; # # for(idx = 0; idx < count - 1; ++idx) # for(jdx = 0; jdx < count - 1 - idx; ++jdx) # if(array[jdx + 0] > array[jdx + 1]) # { # swapv = array[jdx + 0]; # array[jdx + 0] = array[jdx + 1]; # array[jdx + 1] = swapv; # } # } #========================================================= # X: array: index registru - bazova adresa pole # Y: count: pocet prvku pole # F10: 0/1 = vzsetupne/sestupe # navrat: drop 2 lbl 10 ipush 7 #-------------------------------------------------------- # Ulozeni argumentu funkce a toho, co se nesmi prepsat #-------------------------------------------------------- sto .2 # array --> r.2 x<> l # LASTx sto .6 # --> r.6 x<> l # vratit array dec y dec y # Y: count - 2 + # X: &array[count - 2] sto .3 # --> r.3 rdn sto .4 # Z --> r.4 rdn sto .5 # T --> r.5 #---------------- # Cyklus [idx] #---------------- 1 # LCN.increment = 1 rcl .3 # LCN.final = &array[count - 2] rcl .2 # LCN.counter = array x>=y? # je co radit? rtn # ne lcn sto .0 lbl 11 #---------------- # Cyklus [jdx] #---------------- 1 # LCN.increment = 1 rcl .3 # &array[count - 2] rcl .0 count # &array[idx] - rcl+ .2 # LCN.final = &array[count - 2 - idx] rcl .2 # LCN.counter = array lcn sto .1 lbl 12 #--------------------- # Porovnani, zamena #--------------------- rcl .1 count # X: &array[jdx + 0] rcl @x # X: array[jdx + 0] inc y # Y: &array[jdx + 1] rcl @y # X: array[jdx + 1] enter rcl- z # X: array[jdx + 0] - array[jdx + 1] fs? 10 # radit setupne? chs # ano x>0? gto 13 rdn x<>y # Z: &array[jdx + 1] sto @z dec z # Z: &array[jdx + 0] x<>y sto @z rup lbl 13 rdn #-------------------------- # Pokracovani obou cyklu #-------------------------- isg .1 gto 12 isg .0 gto 11 #--------------------------- # Obnova ulozenych hodnot #--------------------------- rcl .6 # hodnota LASTx sto L # vratit na sve misto clst rcl .5 # puvodni hodnota v T --> Y rcl .4 # puvodni hodnota v Z --> X rtn