Algorithme de tri des bulles, algorithme de tri des bulles en langage C en détail

Le tri à bulles est la méthode de tri la plus simple et facile à comprendre. Bien qu'il comporte de nombreuses étapes de calcul et qu'il ne soit pas le plus rapide, il est le plus basique et doit être maîtrisé par les débutants.

Le principe du tri des bulles est le suivant: de gauche à droite, les éléments adjacents sont comparés. Chaque fois que vous comparez un tour, vous trouverez le plus grand ou le plus petit de la séquence. Ce numéro apparaîtra à l'extrême droite de la séquence.

En prenant le tri de petit à grand comme exemple, après le premier tour de comparaison, le plus grand nombre parmi tous les nombres flottera à l'extrême droite; après le deuxième tour de comparaison, le deuxième plus grand nombre parmi tous les nombres flottera jusqu'à l'avant-dernier Positions ... il suffit de les comparer tour par tour, et enfin de trier du petit au grand.

Par exemple, triez la séquence suivante de petite à grande: 90 21 132 -58 34

Le premier tour:
1) 90 et 21 ratio, 90> 21, puis ils échangent des positions: 21 90132 -58 34

2) Le ratio de 90 à 132, 90 <132, il n'est pas nécessaire d'échanger des positions.
3) Le ratio de 132 et –58, 132> –58, puis ils échangent des positions: 21 90 -58 132 34

4) Le ratio de 132 à 34, 132> 34, puis ils échangent des positions: 21 90 -58 34 132

À ce stade, le premier tour est relativement complet. Le résultat du premier tour est de trouver le plus grand nombre de la séquence et de flotter à l'extrême droite.

Lors de la comparaison, la nième comparaison de chaque tour est une comparaison entre le nième élément et le n + 1ème élément de la nouvelle séquence (si n commence à 1).

Le deuxième tour:
1) Ratio 21: 90, 21 <90, il n'y a pas besoin d'échanger de positions.
2) Le ratio de 90 et –58, 90> –58, puis ils échangent des positions: 21 -58 90 34 132

3) Le ratio de 90 à 34, 90> 34, puis ils échangent des positions: 21 -58 34 90 132

Ceci est le deuxième tour. Le résultat du deuxième tour a été de trouver le deuxième plus grand nombre de la séquence et de flotter vers la deuxième position à l'extrême droite.

Troisième tour:
1) ratio 21 et –58, 21> –58, puis ils échangent des positions: -58 21 34 90 132

2) Ratio de 21 à 34, 21 <34, il n'est pas nécessaire d'échanger des positions.

Ceci est le troisième tour. Le résultat du troisième tour est de trouver le troisième plus grand nombre de la séquence et de flotter jusqu'à la troisième position à l'extrême droite.

Round 4:
1) –58 à 21 ratio, –58 <21, il n'est pas nécessaire d'échanger des positions.

À ce stade, la séquence entière est triée. La séquence du petit au grand est "–58 21 34 90 132". On peut également conclure de cet exemple que s'il y a n données, alors seulement n – 1 tours doivent être comparés. En plus du premier tour, chaque tour n'a pas besoin de tout comparer. Parce qu'après la comparaison du tour précédent, le tour qui a été comparé a trouvé le plus grand nombre dans le tour et a flotté vers la droite, donc le bon nombre n'a pas besoin d'être comparé pour savoir qu'il est grand.

Écrivez un programme ci-dessous:

# include <stdio.h>
int main(void)
{
    int a[] = {900, 2, 3, -58, 34, 76, 32, 43, 56, -70, 35, -234, 532, 543, 2500};
    int n;  //存放数组a中元素的个数
    int i;  //比较的轮数
    int j;  //每轮比较的次数
    int buf;  //交换数据时用于存放中间数据
    n = sizeof(a) / sizeof(a[0]);  /*a[0]是int型, 占4字节, 所以总的字节数除以4等于元素的个数*/
    for (i=0; i<n-1; ++i)  //比较n-1轮
    {
        for (j=0; j<n-1-i; ++j)  //每轮比较n-1-i次,
        {
            if (a[j] < a[j+1])
            {
                buf = a[j];
                a[j] = a[j+1];
                a[j+1] = buf;
            }
        }
    }
    for (i=0; i<n; ++i)
    {
        printf("%d\x20", a[i]);
    }
    printf("\n");
    return 0;
}

Le résultat est:
2500 900 543 532 76 56 43 35 34 32 3 2 -58 -70 -234

programme, pourquoi le nombre de comparaisons par tour est j <n – 1 – i au lieu de j <n – 1?

Parce qu'il y a une caractéristique du tri à bulles, ce programme est trié du plus grand au plus petit, donc après le premier tour de tri, le plus petit nombre flottera à l'extrême droite; après le deuxième tour de tri, le deuxième plus petit nombre flottera vers le bas Deux positions; après le troisième tour de tri, le troisième plus petit nombre flottera jusqu'à l'avant-dernière position ... Autrement dit, autant de tours qu'il y a de tris, autant de nombres ont été triés selon les exigences de tri, ils n'ont pas besoin d'être Comparez. C'est bien d'écrire j <n – 1, mais le programme fait beaucoup de travail inutile quand il est exécuté.

 

A publié 42 articles originaux · Comme 10 · Visiteurs 10 000+

Je suppose que tu aimes

Origine blog.csdn.net/qq_37659294/article/details/102760464
conseillé
Classement