2009-07-26 7 views
0

J'ai implémenté ce que je crois être un algorithme de tri de fusion en python. Je n'ai jamais programmé en Python auparavant, j'ai donc utilisé plusieurs ressources avec des commandes qui me semblaient étrangères, pour mieux comprendre.fusionner trier l'implémentation pour trier par longueur de chaîne - python

Cependant, je n'ai jamais implémenté le tri par fusion en premier lieu, donc je ne suis pas sûr si je l'ai même implémenté correctement. Toute orientation, conseils ou corrections seraient grandement appréciés.

Voici ma méthode de fusion:

def merge(left, right): 
    result = [] 
    i, j = 0, 0 
    while(i < len(left) and j< len(right)): 
     if(len(left[i]) <= len(right[j])): 
      print(i) 
      result.append(left[i]) 
      i=i+1 
     else: 
      result.append(right[j]) 
      j=j+1 

    result += left[i:] 
    result += right[j:] 
    return result 

quant à lui, voici ma méthode mergesort:

def mergesort(list): 
    if len(list) < 2: 
     return list 
    else: 
     middle = len(list)/2 
     left = mergesort(list[:middle]) 
     right = mergesort(list[middle:]) 
     return merge(left, right) 

Merci pour toute aide possible! :)

Répondre

3

Ne nommez pas les variables "liste". C'est le nom du type de tableau de Python, donc utiliser une variable du même nom est confus.

Lorsque vous revenez d'un conditionnel, vous n'avez pas besoin de placer le reste de la fonction dans un autre bloc.

def mergesort(list): 
    if len(list) < 2: 
     return list 
    middle = len(list)/2 
    left = mergesort(list[:middle]) 
    right = mergesort(list[middle:]) 
    return merge(left, right) 

Dans l'ensemble, cela semble raisonnable.

Bien sûr, pour tout autre chose qu'un exercice, vous devriez utiliser list.sort ou sorted().

a = ["abc", "de", "f", "ghijkl"] 
print sorted(a, lambda a,b: cmp(len(a), len(b))) 
+0

merci pour cela! Je ne sais pas quels mots sont des mots-clés pour la langue pour le moment. Je ne suis pas sûr de savoir quel exemple serait le meilleur pour apprendre la langue, alors je vais juste avec. merci pour vos conseils! – Chris

+0

Cependant, j'ai un problème avec la méthode. il semble simplement retourner la liste exactement comment elle est passée. J'appelle simplement mergesort (originalArray) pour le trier. Cela semble raisonnable, correct? – Chris

+0

Mon mauvais, je n'appelais pas cela correctement. La liste – Chris

2

Comment utiliser la fonction sorted()? Comme ceci:

def len_cmp(x, y): 
    return len(x) - len(y) 

my_strings = ["hello", "foo", "bar", "spam"] 
print sorted(my_strings, len_cmp) 
+0

n'était pas au courant de la fonction triée, merci :) où pourrais-je trouver de la documentation sur la façon dont il est mis en œuvre? – Chris

+0

Vous pouvez trouver une explication décente ici: http://wiki.python.org/moin/HowTo/Sorting C'est très pratique. :) –