def merge(lst, auxlst, lessfunction, lo, mid, hi): """ ordenar el rango [lo, hi] en lst mezclando sus mitades ordenadas en los rangos [lo, mid] y [mid+1, hi] """ if hi <= lo: return lt.copy( lst, auxlst, lo, hi ) #copiar la sublista de lst en el rango [lo, hi] a la lista auxlst en el mismo rango i = lo #recorre la midad ordenada en auxlist en el rango [lo, mid] j = mid + 1 #recorre la midad ordenada en auxlist en el rango [mid+1, hi] for k in range(lo, hi + 1): if i > mid: #ya se pasaron los elementos de la mitad ordenada [lo, mid] a lst lt.changeInfo(lst, k, lt.getElement(auxlst, j)) j += 1 elif j > hi: #ya se pasaron los elementos de la mitad ordenada [mid+1, hi] a lst lt.changeInfo(lst, k, lt.getElement(auxlst, i)) i += 1 elif lessfunction(lt.getElement(auxlst, j), lt.getElement(auxlst, i)): # auxlst[j] < auxlst[i] lt.changeInfo(lst, k, lt.getElement(auxlst, j)) j += 1 else: # auxlst[i] <= auxlst[j] lt.changeInfo(lst, k, lt.getElement(auxlst, i)) i += 1
def mergesort(lst, lessfunction, column): size = lt.size(lst) if size > 1: mid = (size // 2) #se divide la lista original, en dos partes, izquierda y derecha, desde el punto mid. leftlist = lt.subList(lst, 1, mid) rightlist = lt.subList(lst, mid + 1, size - mid) #se hace el llamado recursivo con la lista izquierda y derecha mergesort(leftlist, lessfunction, column) mergesort(rightlist, lessfunction, column) #i recorre la lista izquierda, j la derecha y k la lista original i = j = k = 1 leftelements = lt.size(leftlist) rightelements = lt.size(rightlist) while (i <= leftelements) and (j <= rightelements): elemi = lt.getElement(leftlist, i) elemj = lt.getElement(rightlist, j) #compara y ordena los elementos if lessfunction(elemj, elemi, column): # caso estricto elemj < elemi lt.changeInfo(lst, k, elemj) j += 1 else: # caso elemi <= elemj lt.changeInfo(lst, k, elemi) i += 1 k += 1 #Agrega los elementos que no se comprararon y estan ordenados while i <= leftelements: lt.changeInfo(lst, k, lt.getElement(leftlist, i)) i += 1 k += 1 while j <= rightelements: lt.changeInfo(lst, k, lt.getElement(rightlist, j)) j += 1 k += 1
def test_changeInfo(lstbooks): book10 = {'book_id': '10', 'book_title': 'Title 10', 'author': 'author 10'} lt.changeInfo(lstbooks, 1, book10) book = lt.getElement(lstbooks, 1) assert book10 == book
def test_changeInfo(lstmovies): movie10 = {'id': '10', 'title': 'Title 10', 'author': 'author 10'} lst.changeInfo(lstmovies, 1, movie10) movie = lst.getElement(lstmovies, 1) assert movie10 == movie