Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #4
0
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