def end_ord(l) :
    """Recherche l'indice du premier élément non trié.

    Cette fonction recherche le premier élément d'une liste d'entiers
    qui n'est pas dans l'ordre numérique croissant et retourne son indice. Si la
    valeur retounée est égale à zéro alors les deux premiers éléments
    ne sont pas dans le bonne ordre, la suite des éléments étant possiblement
    triés. Si la valeur retournée est égale à la longueur de la liste,
    alors cele-ci est triée.

    Parameters
    ----------
    l : list
        `l` est une liste d'entiers.

    Returns
    -------
    int
        `int` est l'indice du premier élément mal positionné de `l`.

    See Also
    --------
    permutation : Recherche itérative de toutes les inversions permettant d'améliorer le score.
    nb_inversion : Recherche itérative du nombre minimal d'inversion.

    Examples
    --------
    >>> L1 = [3,4,1,2]
    >>> end_ord(L1)
    2
    >>> L2 = [1,2,3,4]
    >>> end_ord(L2)
    4
    >>> L3 = [2,4,1,3]
    >>> end_ord(L3)
    0

    """
    assert(type(l[0])== int)
    ind=0
    cond = True
    while cond : 
        if ind < len(l) -1 :
            if l[ind+1]==l[ind]+1 :  # Si l'élément courrant +1 est équivalent au suivant. 
                ind+=1
                cond = True 
            else :
                cond = False
        else :  # La liste est entièrement triée.
            cond = False
    if ind ==0 : 
        return 0
    else :
        return ind+1