Devoirs à bulles


130

En classe, nous faisons des algorithmes de tri et, bien que je les comprenne bien lorsque j'en parle et que j'écris du pseudocode, j'ai des problèmes pour écrire du code réel pour eux.

Voici ma tentative en Python:

mylist = [12, 5, 13, 8, 9, 65]

def bubble(badList):
    length = len(badList) - 1
    unsorted = True

    while unsorted:
        for element in range(0,length):
            unsorted = False
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                print badList
            else:
                unsorted = True

print bubble(mylist)

Maintenant, cela (pour autant que je sache) trie correctement, mais une fois terminé, il se boucle indéfiniment.

Comment ce code peut-il être corrigé pour que la fonction se termine correctement et trie correctement une liste de toute taille (raisonnable)?

PS Je sais que je ne devrais pas vraiment avoir d'impressions dans une fonction et que je devrais avoir un retour, mais je ne l'ai juste pas encore fait car mon code ne fonctionne pas encore vraiment.


29
@KM - Doit-il sortir de votre pelouse?
Aiden Bell

123
Le message est essentiellement: "J'ai du mal à coder, c'est ce que j'ai fait, ça ne marche pas." Il y a évidemment un implicite "Quelqu'un peut-il me donner des conseils s'il vous plaît?" Contrairement à de nombreuses questions sur les devoirs, celle-ci (a) est bien rédigée, (b) est franc sur le fait d'être des devoirs et (c) comprend une bonne tentative pour résoudre le problème. Je ne pense pas que l'absence d'un point d'interrogation réel nuit trop.
John Fouhy

36
Le tri à bulles est utilisé comme outil d'apprentissage car c'est l'algorithme de tri le plus facile à comprendre pour la plupart des gens. C'est un bon point d'entrée pour apprendre le tri et les algorithmes en général. Si nous n'enseignions que des choses que les gens utiliseraient réellement, la discussion sur le tri commencerait et se terminerait par "utiliser la routine de tri de la bibliothèque".
Bill the Lizard

38
Cette question est une affiche-enfant pour savoir comment poser de bonnes questions de "devoirs". Pour revenir au point de John Fouhy, il existe un exemple de code, il est bien écrit, et l'affiche s'efforce de nous faciliter la tâche. Bien joué, Joshhunt.
Jarret Hardie

20
Le tri à bulles n'est pas un algorithme de tri facile à comprendre pour les gens. D'après ma propre expérience et mon expérience d'enseignement, je peux affirmer en toute confiance que le tri par insertion, le tri par sélection, le tri min (tri minimal des éléments), même (pour certains étudiants) le tri par fusion et le tri rapide sont plus faciles à comprendre - après tout, ils correspondent un peu moyens naturels de trier une liste, mais le tri par bulles est simplement artificiel. En outre, le tri à bulles est sujet à de nombreuses erreurs ponctuelles et à des erreurs de boucle infinies, comme cette question ici. Comme le dit Knuth, "le tri des bulles semble n'avoir rien à recommander, sauf un nom accrocheur ..."
ShreevatsaR

Réponses:


127

Pour expliquer pourquoi votre script ne fonctionne pas pour le moment, je renommerai la variable unsorteden sorted.

Au début, votre liste n'est pas encore triée. Bien sûr, nous nous sommes mis sortedà False.

Dès que nous démarrons la whileboucle, nous supposons que la liste est déjà triée. L'idée est la suivante: dès que l'on trouve deux éléments qui ne sont pas dans le bon ordre, on se sortedremet False. sortedne restera True que s'il n'y avait pas d'éléments dans le mauvais ordre .

sorted = False  # We haven't started sorting yet

while not sorted:
    sorted = True  # Assume the list is now sorted
    for element in range(0, length):
        if badList[element] > badList[element + 1]:
            sorted = False  # We found two elements in the wrong order
            hold = badList[element + 1]
            badList[element + 1] = badList[element]
            badList[element] = hold
    # We went through the whole list. At this point, if there were no elements
    # in the wrong order, sorted is still True. Otherwise, it's false, and the
    # while loop executes again.

Il existe également de petits problèmes mineurs qui aideraient le code à être plus efficace ou plus lisible.

  • Dans la forboucle, vous utilisez la variable element. Techniquement, ce elementn'est pas un élément; c'est un nombre représentant un index de liste. De plus, c'est assez long. Dans ces cas, utilisez simplement un nom de variable temporaire, comme ipour "index".

    for i in range(0, length):
  • La rangecommande peut également prendre un seul argument (nommé stop). Dans ce cas, vous obtenez une liste de tous les entiers de 0 à cet argument.

    for i in range(length):
  • Le Guide de style Python recommande que les variables soient nommées en minuscules avec des traits de soulignement. C'est un petit pinaillage pour un petit script comme celui-ci; il s'agit davantage de vous habituer à ce à quoi ressemble le plus souvent le code Python.

    def bubble(bad_list):
  • Pour permuter les valeurs de deux variables, écrivez-les sous forme d'affectation de tuple. Le côté droit est évalué comme un tuple (disons, (badList[i+1], badList[i])est (3, 5)) puis est assigné aux deux variables du côté gauche ( (badList[i], badList[i+1])).

    bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]

Mettez tout cela ensemble, et vous obtenez ceci:

my_list = [12, 5, 13, 8, 9, 65]

def bubble(bad_list):
    length = len(bad_list) - 1
    sorted = False

    while not sorted:
        sorted = True
        for i in range(length):
            if bad_list[i] > bad_list[i+1]:
                sorted = False
                bad_list[i], bad_list[i+1] = bad_list[i+1], bad_list[i]

bubble(my_list)
print my_list

(Au fait, j'ai également supprimé votre déclaration imprimée.)


1
Juste sur ce dernier bit de code, bubble ne renvoie rien, donc le résultat final est que «Aucun» est affiché. Vous voulez probablement soit retourner la liste, soit faire bulle (ma_liste) puis imprimer ma_liste.
Tung Nguyen

9
+1 conseils bien structurés et clairs. C'est formidable de vous voir expliquer au lecteur ce que vous avez fait et pourquoi plutôt que de simplement écrire une solution rapide.
Tom Leys

1
Je suis un programmeur C #, donc c'est peut-être simplement parce que je n'obtiens pas Python, mais n'avez-vous pas besoin de quelque chose dans la boucle while pour soustraire 1 de la longueur pour obtenir un algorithme de tri de bulles normal?
Martin Brown

20
Il s'agit d'une implémentation naïve (mais pas incorrecte) de Bubble Sort. Après chaque itération de la whileboucle, le plus gros élément "bouillonne" jusqu'à la fin de la liste. Ainsi, après une itération, le dernier élément est définitivement à la bonne place (et ne sera pas déplacé par itérations successives). En soustrayant 1 de la longueur, vous optimisez l'algorithme en ne triant que la sous-liste qui n'est pas encore triée (les length-néléments les plus en avant de la liste). J'ai choisi de sauter cette optimisation, car il s'agit plus d'une optimisation qu'une partie vitale de l'algorithme.
Wesley du

2
Put it all together, and you get this:... eh bien, vous avez manqué celui-ci:The range command can also take just one argument (named stop).
Peter Perháč

10

Le but du tri à bulles est de déplacer les objets les plus lourds en bas à chaque tour, tout en déplaçant les objets les plus légers vers le haut. Dans la boucle interne, où vous comparez les éléments, vous n'avez pas à parcourir toute la liste à chaque tour . Le plus lourd est déjà placé en dernier. La variable permutée est une vérification supplémentaire afin que nous puissions marquer que la liste est maintenant triée et éviter de continuer avec des calculs inutiles.

def bubble(badList):
    length = len(badList)
    for i in range(0,length):
        swapped = False
        for element in range(0, length-i-1):
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                swapped = True
        if not swapped: break

    return badList

Votre version 1, corrigée:

def bubble(badList):
    length = len(badList) - 1
    unsorted = True
    while unsorted:
        unsorted = False
        for element in range(0,length):
            #unsorted = False
            if badList[element] > badList[element + 1]:
                 hold = badList[element + 1]
                 badList[element + 1] = badList[element]
                 badList[element] = hold
                 unsorted = True
                 #print badList
             #else:
                 #unsorted = True

     return badList

8

C'est ce qui se passe lorsque vous utilisez un nom de variable de signification négative, vous devez inverser leurs valeurs. Ce qui suit serait plus facile à comprendre:

sorted = False
while not sorted:
    ...

En revanche, la logique de l'algorithme est un peu décalée. Vous devez vérifier si deux éléments ont été échangés pendant la boucle for. Voici comment je l'écrirais:

def bubble(values):
    length = len(values) - 1
    sorted = False
    while not sorted:
        sorted = True
        for element in range(0,length):
            if values[element] > values[element + 1]:
                 hold = values[element + 1]
                 values[element + 1] = values[element]
                 values[element] = hold
                 sorted = False
    return values

1
C'est un peu dommage qu'il n'y ait pas de bouton "MAUVAIS" que je puisse appuyer pour cette réponse. Je pense que cette question et les réponses - et en particulier le vote - doivent être présentées la prochaine fois que Joel Spolsky parlera de la façon dont il a réglé les interactions sociales sur stackoverflow.
Daniel Martin

@Daniel: vous pouvez faire ce que d'autres personnes suffisamment réputées (100) peuvent faire - voter contre la mauvaise réponse. Il y a un germe de vérité - les conditions négatives inscrites dans les variables d'indicateur sont mauvaises. Ce n'est pas la réponse complète, cependant - @McWafflestix a raison, je pense.
Jonathan Leffler

2
Vous avez raison, j'ai répondu prématurément à celui-ci. Désolé pour ça.
Martin Cote

2
@Martin - et je dois souligner que je suis plus surpris / choqué par le vote que par la réponse. Le système de réputation vous encourage à obtenir cette première réponse, tout de suite. La partie cassée est la façon dont une réponse incorrecte est votée.
Daniel Martin

2
Je soupçonne que la plupart des gens votent sans vraiment comprendre la question en premier lieu (tout comme la façon dont j'ai répondu à la question). OTOH, la personne qui pose la question a le privilège de choisir la «bonne» réponse par la suite.
Martin Cote

7

Votre utilisation de la variable Unsorted est incorrecte; vous voulez avoir une variable qui vous indique si vous avez permuté deux éléments; si vous avez fait cela, vous pouvez quitter votre boucle, sinon vous devez recommencer. Pour corriger ce que vous avez ici, mettez simplement le "unsorted = false" dans le corps de votre cas if; supprimez votre autre cas; et mettez "unsorted = true avant votre forboucle.


5
def bubble_sort(l):
    for passes_left in range(len(l)-1, 0, -1):
        for index in range(passes_left):
            if l[index] < l[index + 1]:
               l[index], l[index + 1] = l[index + 1], l[index]
    return l

1
Je pense que la question était plus du type «Comment ce code peut-il être corrigé», et non «quel est votre type de bulle?
Josh Hunt

4
vous avez tout à fait raison, mais le faire de la bonne manière est plus important
mtasic85

6
C'est vrai, peut-être, mtasic ... mais tout ce qui est étiqueté comme devoir est plus instructivement modifié que réécrit (surtout quand il est étiqueté comme devoir par l'OP).
Jarret Hardie

1
C'est une réécriture parfaite du livre de texte C à bulles que la plupart des gens étudient. J'ai écrit la même chose.
Lakshman Prasad

2
l'ajout de bonnes informations est utile à mon avis. si bonne réponse ... j'ai pensé que vous pourriez utiliser le drapeau pour casser le plus tôt possible.
Grijesh Chauhan

3

#Une fonction très simple, peut être optimisée (évidemment) en diminuant l'espace problème du 2ème tableau. Mais même complexité O (n ^ 2).

def bubble(arr):
    l = len(arr)        
    for a in range(l):
        for b in range(l-1):
            if (arr[a] < arr[b]):
            arr[a], arr[b] = arr[b], arr[a]
    return arr 

La façon dont vous pouvez échanger les valeurs en Python est un peu moins complexe: arr[a], arr[b] = arr[b], arr[a]
Makoto

1

Vous avez quelques erreurs là-dedans. Le premier est de longueur, et le second est dans votre utilisation de non trié (comme indiqué par McWafflestix). Vous voudrez probablement aussi renvoyer la liste si vous allez l'imprimer:

mylist = [12, 5, 13, 8, 9, 65]

def bubble(badList):
    length = len(badList) - 2
    unsorted = True

    while unsorted:
        for element in range(0,length):
            unsorted = False

            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                print badList
                unsorted = True

    return badList

print bubble(mylist)

eta: Vous avez raison, ce qui précède est un buggy comme l'enfer. Mon mal de ne pas avoir testé d'autres exemples.

def bubble2(badList):
    swapped = True
    length = len(badList) - 2

    while swapped:
        swapped = False
        for i in range(0, length):
            if badList[i] > badList[i + 1]:

                # swap
                hold = badList[i + 1]
                badList[i + 1] = badList[i]
                badList[i] = hold

                swapped = True

    return badList

Le "unsorted = False" ne devrait-il pas être en dehors de la boucle for?
Svante

Il a eu quelques problèmes de plus que cela;)
Trevor Oke

1

Je suis un nouveau débutant, j'ai commencé à lire sur Python hier. Inspiré par votre exemple, j'ai créé quelque chose peut-être plus dans le style des 80 cravates, mais néanmoins cela fonctionne un peu

lista1 = [12, 5, 13, 8, 9, 65]

i=0
while i < len(lista1)-1:
    if lista1[i] > lista1[i+1]:
        x = lista1[i]
        lista1[i] = lista1[i+1]
        lista1[i+1] = x
        i=0
        continue
    else:
        i+=1

print(lista1)

1

Le problème avec l'algorithme d'origine est que si vous aviez un nombre inférieur plus loin dans la liste, il ne l'amènerait pas à la bonne position triée. Le programme doit revenir au début à chaque fois pour s'assurer que les nombres sont triés tout au long.

J'ai simplifié le code et cela fonctionnera désormais pour n'importe quelle liste de nombres quelle que soit la liste et même s'il y a des nombres qui se répètent. Voici le code

mylist = [9, 8, 5, 4, 12, 1, 7, 5, 2]
print mylist

def bubble(badList):
    length = len(badList) - 1
    element = 0
    while element < length:
        if badList[element] > badList[element + 1]:
            hold = badList[element + 1]
            badList[element + 1] = badList[element]
            badList[element] = hold
            element = 0
            print badList
        else:
            element = element + 1

print bubble(mylist)

1
def bubble_sort(l):
    exchanged = True
    iteration = 0
    n = len(l)

    while(exchanged):
        iteration += 1
        exchanged = False

        # Move the largest element to the end of the list
        for i in range(n-1):
            if l[i] > l[i+1]:
                exchanged = True
                l[i], l[i+1] = l[i+1], l[i]
        n -= 1   # Largest element already towards the end

    print 'Iterations: %s' %(iteration)
    return l

1
Bubble élément plus grand jusqu'à la fin. Et décrémentez le compteur de fin, "n" pour ne pas avoir à le comparer à nouveau. Continuez avec la boucle while tant qu'il y a des échanges. Pire cas: O (N ^ 2) Meilleur cas: O (N)
Zile Rehman

1
def bubbleSort(alist):
if len(alist) <= 1:
    return alist
for i in range(0,len(alist)):
   print "i is :%d",i
   for j in range(0,i):
      print "j is:%d",j
      print "alist[i] is :%d, alist[j] is :%d"%(alist[i],alist[j])
      if alist[i] > alist[j]:
         alist[i],alist[j] = alist[j],alist[i]
return alist

alist = [54,26,93,17,77,31,44,55,20, -23, -34,16,11,11,11]

imprimer bubbleSort (alist)


Veuillez indenter correctement votre exemple de code: ceci est, bien sûr, particulièrement important en Python. Vous voudrez peut-être également expliquer pourquoi votre solution vaut la peine d'être envisagée
car

1
def bubble_sort(a):
    t = 0
    sorted = False # sorted = False because we have not began to sort
    while not sorted:
    sorted = True # Assume sorted = True first, it will switch only there is any change
        for key in range(1,len(a)):
            if a[key-1] > a[key]:
                sorted = False
                t = a[key-1]; a[key-1] = a[key]; a[key] = t;
    print a

1

Un exemple plus simple:

a = len(alist)-1
while a > 0:
    for b in range(0,a):
        #compare with the adjacent element
        if alist[b]>=alist[b+1]:
            #swap both elements
            alist[b], alist[b+1] = alist[b+1], alist[b]
    a-=1

Cela prend simplement les éléments de 0 à a (en gros, tous les éléments non triés de ce tour) et le compare à son élément adjacent, et effectue un échange s'il est supérieur à son élément adjacent. À la fin du tour, le dernier élément est trié et le processus s'exécute à nouveau sans lui, jusqu'à ce que tous les éléments aient été triés.

Il n'est pas nécessaire de définir une condition, qu'elle sortsoit vraie ou non.

Notez que cet algorithme prend en considération la position des nombres uniquement lors de l'échange, donc les nombres répétés ne l'affecteront pas.

PS. Je sais que cela fait très longtemps que cette question a été publiée, mais je voulais juste partager cette idée.


1
arr = [5,4,3,1,6,8,10,9] # array not sorted

for i in range(len(arr)):
    for j in range(i, len(arr)):
        if(arr[i] > arr[j]):
            arr[i], arr[j] = arr[j], arr[i]

            print (arr)

0
def bubble_sort(li):
    l = len(li)
    tmp = None
    sorted_l = sorted(li)
    while (li != sorted_l):
        for ele in range(0,l-1):
            if li[ele] > li[ele+1]:
                tmp = li[ele+1]
                li[ele+1] = li [ele]
                li[ele] = tmp
    return li

0
def bubbleSort ( arr ):
    swapped = True 
    length = len ( arr )
    j = 0

    while swapped:
        swapped = False
        j += 1 
        for i in range ( length  - j ):
            if arr [ i ] > arr [ i + 1 ]:
                # swap
                tmp = arr [ i ]
                arr [ i ] = arr [ i + 1]
                arr [ i + 1 ] = tmp 

                swapped = True

if __name__ == '__main__':
    # test list
    a = [ 67, 45, 39, -1, -5, -44 ];

    print ( a )
    bubbleSort ( a )
    print ( a )

0
def bubblesort(array):
    for i in range(len(array)-1):
        for j in range(len(array)-1-i):
            if array[j] > array[j+1]:
                array[j], array[j+1] = array[j+1], array[j]
    return(array)

print(bubblesort([3,1,6,2,5,4]))

1
Bien que ce code puisse répondre à la question, fournir un contexte supplémentaire sur la manière et / ou la raison pour laquelle il résout le problème améliorerait la valeur à long terme de la réponse.
Alexander

0

J'envisage d'ajouter ma solution car chaque solution ici est d'avoir

  1. plus de temps
  2. une plus grande complexité de l'espace
  3. ou faire trop d'opérations

alors est devrait être

Alors, voici ma solution:


def countInversions(arr):
    count = 0
    n = len(arr)
    for i in range(n):
        _count = count
        for j in range(0, n - i - 1):
            if arr[j] > arr[j + 1]:
                count += 1
                arr[j], arr[j + 1] = arr[j + 1], arr[j]
        if _count == count:
            break
    return count

0

Si quelqu'un est intéressé par une implémentation plus courte utilisant une compréhension de liste:

def bubble_sort(lst: list) -> None:
    [swap_items(lst, i, i+1) for left in range(len(lst)-1, 0, -1) for i in range(left) if lst[i] > lst[i+1]]


def swap_items(lst: list, pos1: int, pos2: int) -> None:
    lst[pos1], lst[pos2] = lst[pos2], lst[pos1]

0

Voici une variante différente du tri à bulles sans forboucle. Fondamentalement, vous considérez le lastIndexde arrayet lentement decrementingjusqu'à ce qu'il soit le premier index du tableau.

Le algorithmcontinuera à se déplacer dans le tableau comme ceci jusqu'à ce qu'une passe entière soit effectuée sans qu'aucune ne swapsse produise.

La bulle est en quelque sorte en Quadratic Time: O(n²)matière de performances.

class BubbleSort: 
  def __init__(self, arr):
    self.arr = arr;

  def bubbleSort(self):
    count = 0;
    lastIndex = len(self.arr) - 1;
    
    while(count < lastIndex):
      if(self.arr[count] > self.arr[count + 1]):
        self.swap(count)  
      count = count + 1;

      if(count == lastIndex):
        count = 0;
        lastIndex = lastIndex - 1;   

  def swap(self, count):
    temp = self.arr[count];
    self.arr[count] = self.arr[count + 1];
    self.arr[count + 1] = temp;
    
arr = [9, 1, 5, 3, 8, 2]
p1 = BubbleSort(arr)

print(p1.bubbleSort())

-1

Les réponses fournies par the-fury et Martin Cote ont résolu le problème de la boucle infinie, mais mon code ne fonctionnait toujours pas correctement (pour une liste plus grande, il ne trierait pas correctement.). J'ai fini par abandonner la unsortedvariable et j'ai utilisé un compteur à la place.

def bubble(badList):
    length = len(badList) - 1
    n = 0
    while n < len(badList):
        for element in range(0,length):
            if badList[element] > badList[element + 1]:
                hold = badList[element + 1]
                badList[element + 1] = badList[element]
                badList[element] = hold
                n = 0
            else:
                n += 1
    return badList

if __name__ == '__main__':
    mylist = [90, 10, 2, 76, 17, 66, 57, 23, 57, 99]
    print bubble(mylist)

Si quelqu'un pouvait fournir des conseils sur la façon d'améliorer mon code dans les commentaires, ce serait très apprécié.


Vous pouvez accélérer un tri par bulles en sautant la partie de votre liste dont vous savez qu'elle est déjà triée (en raison des itérations précédentes). Voir en.wikipedia.org/wiki/Bubble_sort#Alternative_implementations
Blorgbeard sort

3
encore une fois, tout ce que vous avez vraiment à faire est d'utiliser un booléen (appelez-le intact). déclarez-le en dehors de votre boucle; boucle jusqu'à ce que intact = true. dans votre boucle while, définissez intact pour être vrai; dans le corps de votre si, définissez intact pour être faux. En faisant cela, vous pouvez abandonner votre autre cas. de cette façon, si jamais vous changez deux éléments, votre boucle continuera; si vous ne le faites pas, la boucle ne le sera pas.
Paul Sonier

-1

Essaye ça

a = int(input("Enter Limit"))


val = []

for z in range(0,a):
    b = int(input("Enter Number in List"))
    val.append(b)


for y in range(0,len(val)):
   for x in range(0,len(val)-1):
       if val[x]>val[x+1]:
           t = val[x]
           val[x] = val[x+1]
           val[x+1] = t

print(val)

-1

idk si cela peut vous aider après 9 ans ... c'est un simple programme de tri à bulles

    l=[1,6,3,7,5,9,8,2,4,10]

    for i in range(1,len(l)):
        for j in range (i+1,len(l)):
            if l[i]>l[j]:
                l[i],l[j]=l[j],l[i]

-1
def merge_bubble(arr):
    k = len(arr)
    while k>2:
        for i in range(0,k-1):
            for j in range(0,k-1):
                if arr[j] > arr[j+1]:
                    arr[j],arr[j+1] = arr[j+1],arr[j]

        return arr
        break
    else:
        if arr[0] > arr[1]:
            arr[0],arr[1] = arr[1],arr[0]
        return arr 

-1
def bubble_sort(l):
    for i in range(len(l) -1):
        for j in range(len(l)-i-1):
            if l[j] > l[j+1]:
                l[j],l[j+1] = l[j+1], l[j]
    return l

Il vaudrait mieux ajouter quelques explications à votre code.
Masoud Rahimi

-1
def bubble_sorted(arr:list):
    while True:
        for i in range(0,len(arr)-1):
            count = 0
            if arr[i] > arr[i+1]:
                count += 1
                arr[i], arr[i+1] = arr[i+1], arr[i]
        if count == 0:
            break
    return arr
arr = [30,20,80,40,50,10,60,70,90]
print(bubble_sorted(arr))
#[20, 30, 40, 50, 10, 60, 70, 80, 90]

-3

def bubbleSort(a): def swap(x, y): temp = a[x] a[x] = a[y] a[y] = temp #outer loop for j in range(len(a)): #slicing to the center, inner loop, python style for i in range(j, len(a) - j):
#find the min index and swap if a[i] < a[j]: swap(j, i) #find the max index and swap if a[i] > a[len(a) - j - 1]: swap(len(a) - j - 1, i) return a

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.