import random def ustvari_tabelo(n, med_a, med_b): ''' naredimo tabelo/seznam velikosti n iz celih števil med med_a in med_b ''' nova_tab = [] for _ in range(n): nova_tab.append(random.randint(med_a, med_b)) return nova_tab def zlij(tab1, tab2): '''vrni zliti nepadajoče urejeni tabeli/seznama tab1 in tab2''' nova_tab = [] kje_prva = 0 # kje smo v prvi tabeli kje_druga = 0 dol_prva = len(tab1) dol_druga = len(tab2) while kje_prva < dol_prva and kje_druga < dol_druga: if tab1[kje_prva] < tab2[kje_druga]: # poberemo iz prve nova_tab.append(tab1[kje_prva]) kje_prva += 1 else: # iz druge nova_tab.append(tab2[kje_druga]) kje_druga += 1 # prepišemo "ostanke" while kje_prva < dol_prva: nova_tab.append(tab1[kje_prva]) kje_prva += 1 while kje_druga < dol_druga: nova_tab.append(tab2[kje_druga]) kje_druga += 1 return nova_tab def uredi_z_zlivanjem(tab): ''' z urejanjem z zlivanjem uredimo tabelo''' vel = len(tab) if vel < 2: return tab[:] # vrnemo novo identično tabelo # na pol prva_pol = tab[:vel//2] druga_pol = tab[vel//2:] urejena_prva = uredi_z_zlivanjem(prva_pol) urejena_druga = uredi_z_zlivanjem(druga_pol) urejena = zlij(urejena_prva, urejena_druga) return urejena if __name__ == '__main__': velikost = int(input('Kako velika je tabela: ')) od_kje = int(input('Sp. meja: ')) do_kam = int(input('Zg. meja: ')) tabela = ustvari_tabelo(velikost, od_kje, do_kam) print('Originalna tabela: ', tabela) urejena = uredi_z_zlivanjem(tabela) print('Urejena: ', urejena)