Algorithme de tri (1) : tri détaillé des bulles

Avant-propos : j'ai récemment changé de travail, et des entretiens avec une usine un peu plus grande seront interrogés sur la connaissance des algorithmes et des structures de données. J'ai le temps de le résumer moi-même. Si le résumé n'est pas en place, j'espère que le patron me corrigera .

Souvenir épisodique : En fait, l'école du tri à bulles est pourrie, mais c'est très étrange pourquoi j'oublie parfois d'appliquer la logique après un certain temps ? Il n'est pas souvent utilisé, et pour être honnête, il n'est généralement pas utilisé au travail, mais nous pouvons utiliser la mémoire de scène pour le graver dans nos esprits : il suffit d'un peu de bon sens dans la vie pour s'en souvenir très fermement, et le comparer à poisson crache Dans la scène des bulles, les bulles que les poissons crachent sous l'eau sont très petites lorsqu'ils crachent. Au fur et à mesure que les bulles montent, les bulles deviennent de plus en plus grosses, et finissent par faire surface et se casser. Cette scène est très similaire à Le tri à bulles consiste à trier du plus petit au plus grand, et le processus de rupture d'une bulle est considéré comme une sorte de voyage.

Implémentation de la logique : Après avoir parlé de la méthode de la mémoire, la logique est en fait très claire : comparez les valeurs adjacentes tour à tour, et déplacez la plus grande ou la plus petite vers la fin.

Implémentation du code :
tri vers l'avant :

def bubble_sort(list):
    list_len = len(list)
    for i in range(0, list_len):
        print("第%d趟" % (i+1))
        for j in range(1, list_len):
            if list[j-1] < list[j]:
                list[j-1], list[j] = list[j], list[j-1]
        print(list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    bubble_sort(my_list)


运行结果:
第1[2, 0, 1, 5, 6, 7, 3, 8, 4, 9]2[0, 1, 2, 5, 6, 3, 7, 4, 8, 9]3[0, 1, 2, 5, 3, 6, 4, 7, 8, 9]4[0, 1, 2, 3, 5, 4, 6, 7, 8, 9]5[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]6[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]7[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]8[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]9[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]10[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Tri inversé :

def bubble_sort(list):
    list_len = len(list)
    for i in range(0, list_len):
        print("第%d趟" % (i+1))
        for j in range(1, list_len):
            if list[j-1] < list[j]:
                list[j-1], list[j] = list[j], list[j-1]
        print(list)


if __name__ == '__main__':
    my_list = [7, 2, 0, 1, 5, 6, 8, 3, 9, 4]
    bubble_sort(my_list)
 
 
运行结果:
第1[7, 2, 1, 5, 6, 8, 3, 9, 4, 0]2[7, 2, 5, 6, 8, 3, 9, 4, 1, 0]3[7, 5, 6, 8, 3, 9, 4, 2, 1, 0]4[7, 6, 8, 5, 9, 4, 3, 2, 1, 0]5[7, 8, 6, 9, 5, 4, 3, 2, 1, 0]6[8, 7, 9, 6, 5, 4, 3, 2, 1, 0]7[8, 9, 7, 6, 5, 4, 3, 2, 1, 0]8[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]9[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]10[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

Résumé de Bubble Sort :
Il n'y a pas de meilleur algorithme, seulement l'algorithme le plus approprié. La qualité d'un algorithme est généralement liée à la complexité temporelle, à la complexité spatiale et à la stabilité de l'algorithme.

Complexité temporelle : La mesure de la complexité temporelle est la synthèse du temps nécessaire pour comparer et échanger des positions à chaque fois, c'est-à-dire que la somme des temps nécessaires pour effectuer le tri est appelée complexité temporelle ; la norme de calcul est d'un cycle ( peu importe combien de fois) nous avons noté n, si nous pouvons dénoter la différence dans une structure arborescente binaire comme log n, alors la complexité temporelle du tri des bulles peut être considérée comme étant O(n^2)

Complexité de l'espace : la mesure de la complexité de l'espace est de savoir s'il y a un nouvel espace de stockage demandé pour terminer le tri pendant tout le processus de tri. Si c'est le cas, et plus l'espace est appliqué, alors nous considérons que la complexité de l'espace de l'algorithme est à propos de complexe. , alors le tri à bulles ne s'applique pas à l'espace de stockage dans le processus, nous pensons donc que la complexité spatiale du tri à bulles est petite (sauf pour lui-même)

Stabilité : c'est-à-dire que dans la séquence d'origine, list[i]=list[j], et list[i] est avant list[j], et dans la séquence triée, list[i] est toujours avant list[j], Alors cet algorithme de tri est dit stable, sinon il est dit instable, alors on pense que le tri à bulles est stable, comparaison de stabilité : le tri par tas, le tri rapide, le tri Hill, le tri par sélection sont des algorithmes de tri instables, le tri à bulles, le tri par insertion, et le tri par fusion sont des algorithmes de tri stables.

Je suppose que tu aimes

Origine blog.csdn.net/xiaoxin_OK/article/details/115772540
conseillé
Classement