1
votes

Existe-t-il un moyen de trier une liste non triée avec des éléments répétés?

J'essaye de trier une liste non triée [4, 5, 9, 9, 0, 1, 8]

La liste a deux éléments répétés. J'ai essayé d'aborder la question en ayant une boucle qui parcourt chaque élément en comparant chaque élément avec le suivant dans la liste, puis en plaçant le plus petit élément au début de la liste.

    def sort(ls:
         ls[x]
         x = [4, 5, 9, 9, 0, 1, 8]
          while len(x) > 0:
             for i in the range(0, len(x)):
               lowest = x[i]
               ls.append(lowest)

S'il vous plaît, quelqu'un pourrait-il expliquer où je vais mal et comment le code devrait fonctionner?

Il se peut que j'ai mal réfléchi au problème et mon raisonnement sur la façon dont le code devrait fonctionner n'est pas correct


2 commentaires

Il manque des lignes de code dans la boucle for dans votre question. Pouvez-vous s'il vous plaît partager le bloc de code entier? Merci


Je ne suis pas sûr de ce que vous voulez dire, j'avais répertorié tout le code que j'avais écrit ...


4 Réponses :


0
votes

Oui, vous pouvez essayer x.sort () ou trié (x). Découvrez https://www.programiz.com/python-programming / méthodes / intégré / trié . De plus, dans votre programme, je ne vous vois pas faire de comparaison, par exemple, si x [i] <= x [i + 1] alors ... Ce bloc de code va juste ajouter tous les éléments dans le même ordre, jusqu'à n * n fois. Vérifiez également ce https://en.wikipedia.org/wiki/Insertion_sort


3 commentaires

Je sais qu'il existe une fonction de tri, mais je voulais écrire un morceau de code qui trierait la liste par ordre croissant sans utiliser explicitement une fonction de tri. Est-ce possible de le faire?


Oui c'est le cas. Vérifiez ici medium.com/@george.seif94/… . Cela a 5 façons différentes de trier.


@NameetNameet mieux pour ajouter les liens de SO lui-même



0
votes

Je ne sais pas, si c'est exactement ce que vous recherchez mais essayez: sorted (ListObject) . sorted () retourne les éléments de la liste du plus petit au plus grand. Si un élément est répété, l'élément répété est juste après l'élément d'origine. J'espère que cela a aidé.


2 commentaires

Je voulais écrire un morceau de code sans utiliser la fonction de tri pour trier la liste non ordonnée afin que le code réorganise la liste de [4, 5, 9, 9, 0, 1, 8] -> [0,1 , 4,5,8,9,9] est-ce possible?


Oui, c'est ce que fait sorted () .



0
votes

Pour une fonction Python intégrée à trier, laissez y être votre liste d'origine, vous pouvez utiliser trié (y) ou y.sort (). Gardez à l'esprit que trié (y) renverra une nouvelle liste afin que vous aurait besoin de l'affecter à une variable telle que x = sorted (y); alors que si vous utilisez x.sort (), la liste d'origine sera mutée sur place, vous devrez donc l'appeler telle quelle.

Si vous cherchez à implémenter réellement une fonction de tri, vous pouvez essayer le tri par fusion ou le tri rapide qui s'exécutent en O (n log n) dans lequel gérera les éléments avec la même valeur. Vous pouvez vérifier cela si vous le souhaitez -> https: //www.geeksforgeeks .org / programme-python-pour-tri-fusion / . Pour un algorithme de tri plus facile à comprendre, le tri par insertion ou par bulle gère également les doublons mais a un temps d'exécution plus long O (n ^ 2) -> https://www.geeksforgeeks.org/python-program-for-bubble-sort/ .

Mais oui, je suis d'accord avec Nameet, ce que vous avez actuellement publié semble s'ajouter dans le même ordre.

Essayez l'une des suggestions ci-dessus et j'espère que cela vous aidera à vous orienter dans la bonne direction si vous recherchez une fonction intégrée ou pour implémenter un tri, ce qui peut être fait de plusieurs manières avec différents avantages et inconvénients. chacun. J'espère que cela aide et bonne chance!


4 commentaires

Merci, je vais jeter un oeil aux liens mais j'essaye d'écrire le code sans utiliser une fonction de recherche intégrée. Avez-vous des conseils sur la façon d'aborder cela?


Oui, en plus de ce que tout le monde a fourni, c'est un bon lien à vérifier qui répond également à ce que vous recherchez: tutorialspoint.com/python/python_sorting_algorithms.htm


Comme la simple lecture des exemples de code peut être difficile, j'ai également trouvé la recherche de visuels comme ceux-ci utiles (0:21) -> youtube.com/watch?v=OGzPmgsI-pQ


@AndyPandy mieux pour ajouter les liens de SO lui-même



0
votes

Il existe plusieurs méthodes de tri courantes. prenons le tri par bulles comme exemple,

def sorts(x):
    ls = []
    while len(x) > 0:
        lowest = min(x)
        ls.append(lowest)
        x.remove(lowest)
    return ls 
x = [4, 5, 9, 9, 0, 1, 8]
sorts(x)
#output is [0, 1, 4, 5, 8, 9, 9]

votre code a la même logique que ci-dessous

def bubbleSort(array):
    x = len(array)
    while(x > 1): # the code below make sense only there are at least 2 elements in the list
        for i in range(x-1): # maximum of i is x-2, the last element in arr is arr[x-1]

            if array[i] > array[i+1]:
                array[i], array[i+1] = array[i+1], array[i]
        x -= 1
    return array

x = [4, 5, 9, 9, 0, 1, 8]
bubbleSort(x)


0 commentaires